LLDB-эквивалент макросов GDB

У меня есть очень полезный макрос, определенный в .gdbinit

define rc
call (int)[$arg0 retainCount]
end

Можно ли в любом случае определить тот же макрос для lldb ?

7 голосов | спросил bioffe 31 AM000000120000003731 2012, 00:38:37

2 ответа


0

Это можно сделать с помощью следующего определения команды в lldb:

command regex rc 's/(.+)/print (int)[%1 retainCount]/'

Пример:

(lldb) rc indexPath
print (int)[indexPath retainCount]
(int) $2 = 2

Вы можете поместить это в ~/.lldbinit (и перезапустить Xcode).

Надо думать, что-то вроде

command alias rc print (int)[%1 retainCount]

должен работать, но, как описано в Я не могу заставить этот простой псевдоним LLDB работать расширение% 1 не работает с выражением, а command regex обходной путь.

ответил Martin R 31 AM00000010000002631 2012, 01:25:26
0

Кстати, на архитектурах, где аргументы функции передаются в регистрах (x86_64, armv7), lldb определяет серию псевдонимов регистров, которые отображаются в регистр, используемый для передачи целых значений - arg1, arg2 и т. д. Например,

#include <stdio.h>
int main ()
{
  char *mytext = "hello world\n";
  puts (mytext);
  return 0;
}

и мы можем легко увидеть, какой аргумент передается в put без необходимости помнить соглашения ABI,

   4      char *mytext = "hello world\n";
-> 5      puts (mytext);
   6      return 0;
   7    }
(lldb) p mytext
(char *) $0 = 0x0000000100000f54 "hello world\n"
(lldb) br se -n puts
Breakpoint created: 2: name = 'puts', locations = 1, resolved = 1
(lldb) c
Process 2325 resuming
Process 2325 stopped

libsystem_c.dylib`puts:
-> 0x7fff99ce1d9a:  pushq  %rbp
   0x7fff99ce1d9b:  movq   %rsp, %rbp
   0x7fff99ce1d9e:  pushq  %rbx
   0x7fff99ce1d9f:  subq   $56, %rsp

(lldb) p/x $arg1
(unsigned long) $2 = 0x0000000100000f54
(lldb) 

x86_64 и armv7 оба передают первые «несколько» интегральных значений в регистрах - кроме того, они могут храниться в стеке или других местах, и эти псевдонимы не работают. В настоящее время lldb не предоставляет аналогичных псевдонимов удобства для аргументов с плавающей запятой. Но для наиболее распространенных случаев это покрывает то, что нужно людям.

ответил Jason Molenda 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 23 Sep 2012 14:31:42 +0400 2012, 14:31:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132