2013-07-05 4 views
7

Моя самая используемая gdb команда l затем n затем l -.LLDB: Список исходных кодов

Как я могу получить то же самое в lldb?

Я не доволен необходимостью набрать номер строки, чтобы увидеть код где-то. Я хочу посмотреть, где я нахожусь в коде, после того, как выложил на терминал массу переменных. И я использовал l -, чтобы вернуться, чтобы посмотреть, где я нахожусь, так как последующие вызовы на l будут прокручивать меня вниз (lldb также делает это, но на самом деле не отвечает на l -).

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

ответ

15

В Xcode 4.6 псевдоним l44b l - это простой ярлык для source list.

В верхней части дерева источников это улучшено, чтобы вести себя как gdb. Если вы посмотрите на source/Interpreter/CommandInterpreter.cpp над на http://lldb.llvm.org/ вы увидите, что l теперь регулярное выражение команды псевдоним с этими случаями:

if (list_regex_cmd_ap->AddRegexCommand("^([0-9]+)[[:space:]]*$", "source list --line %1") && 
    list_regex_cmd_ap->AddRegexCommand("^(.*[^[:space:]])[[:space:]]*:[[:space:]]*([[:digit:]]+)[[:space:]]*$", "source list --file '%1' --line %2") && 
    list_regex_cmd_ap->AddRegexCommand("^\\*?(0x[[:xdigit:]]+)[[:space:]]*$", "source list --address %1") && 
    list_regex_cmd_ap->AddRegexCommand("^-[[:space:]]*$", "source list --reverse") && 
    list_regex_cmd_ap->AddRegexCommand("^-([[:digit:]]+)[[:space:]]*$", "source list --reverse --count %1") && 
    list_regex_cmd_ap->AddRegexCommand("^(.+)$", "source list --name \"%1\"") && 
    list_regex_cmd_ap->AddRegexCommand("^$", "source list")) 

С этих случаях вы получите поведение, как это:

Показать текущий кадр :

(lldb) f 
#0: 0x0000000100000f2b a.out`main + 27 at a.c:15 
    12 
    13 
    14 
-> 15  puts ("hi"); // line 15 
    16 
    17  puts ("hi"); // line 17 
    18 } 

показать предыдущие десять строк:

(lldb) l - 
    5  
    6  
    7  
    8  
    9  puts ("hi"); // line 9 
    10 
    11 

Вы также можете использовать настройки stop-line-count-after и stop-line-count-before, чтобы контролировать, сколько контекста источника отображается при остановке кадра.

Обратите внимание, что вы можете создать свой собственный псевдоним команды регулярного выражения в файле ~/.lldbinit с тем же поведением, что и l верхнего уровня lldb. См. help command regex для синтаксиса и примера.

+0

Hm. Я не уверен, почему «я» раньше не работал для меня. Это происходит сейчас. –

+3

Я играл с игрушечным исходным файлом, и я заметил, что если я использовал 'l' несколько раз в конце исходного файла,' l -', похоже, не возвращался назад. Возможно, вы видели это, если бы вы были ближе к концу исходного файла. –

+0

Я вижу. Это, безусловно, раздражающая ошибка, но я рад, что она работает большую часть времени. –

Смежные вопросы