我最常用的gdb
命令是l
,后跟n
,后跟l -
。
如何在lldb中获得相同的内容?
我不满足于只是为了在某处看代码而输入一些行号。在将大量变量转储到终端之后,我想看看我在代码中的位置。我过去常常使用l -
来查看我的位置,因为后续调用l
会向下滚动(lldb也会执行此操作,但关键是不响应l -
)。
也许我错过了一些东西,并且我可以把它放入某种“模式”,这将在一个单独的缓冲区中始终显示相应的源位置。那会很好,但我甚至都没有要求。
答案 0 :(得分:15)
在Xcode 4.6中,lldb的l
别名是source list
的简单快捷方式。
在树源的顶部,这已被改进,表现得更像gdb。如果您在http://lldb.llvm.org/处查看source/Interpreter/CommandInterpreter.cpp
,您会看到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
文件中创建自己的正则表达式命令别名,其行为与树顶的lldb l
相同。有关语法和示例,请参阅help command regex
。
答案 1 :(得分:1)
LLDB:[如何]列出源代码
ie:对于正在寻找的人”,“如何使lldb再次显示我在 上的那一行?(因为最近的命令已覆盖了它)” 就是f
。键入f
,再次查看您在代码中的位置。
f
OR
frame select
另请参见lldb
中的帮助菜单:
help f
显示以下内容:
(lldb) help f Select the current stack frame by index from within the current thread (see 'thread backtrace'.) Syntax: f <cmd-options> [<frame-index>] Command Options Usage: f [-r <offset>] [<frame-index>] -r <offset> ( --relative <offset> ) A relative frame index offset from the current frame index. This command takes options and free-form arguments. If your arguments resemble option specifiers (i.e., they start with a - or --), you must use ' -- ' between the end of the command options and the beginning of the arguments. 'f' is an abbreviation for 'frame select'
该帮助菜单的底部显示“ f
是frame select
的缩写。”
请注意,在gdb
中,等效命令很简单:
f
OR
frame