有没有办法在调试 Xcode/lldb 时设置执行点?更具体地说,在命中断点后,手动将执行点移动到另一行代码?
问问题
4876 次
4 回答
14
如果您正在考虑使用某种方法将其向上或向下移动,您可以单击绿色箭头并将其拖动到特定点。所以如果你想在断点之前备份一行。单击生成的绿色箭头并将其向上拖动。如果您点击运行,您将再次遇到断点
于 2013-07-11T16:07:55.127 回答
5
在 Xcode 6 中,您可以使用j lineNumber
- 请参阅以下文档:
(lldb) help j
Sets the program counter to a new address. This command takes 'raw' input
(no need to quote stuff).
Syntax: _regexp-jump [<line>]
_regexp-jump [<+-lineoffset>]
_regexp-jump [<file>:<line>]
_regexp-jump [*<addr>]
'j' is an abbreviation for '_regexp-jump'
于 2014-10-22T01:59:34.237 回答
2
lldb 的一大优点是它很容易用一点 python 脚本来扩展它。例如,我jump
毫不费力地拼凑了一个新命令:
import lldb
def jump(debugger, command, result, dict):
"""Usage: jump LINE-NUMBER
Jump to a specific source line of the current frame.
Finds the first code address for a given source line, sets the pc to that value.
Jumping across any allocation/deallocation boundaries (may not be obvious with ARC!), or with optimized code, quickly leads to undefined/crashy behavior. """
if lldb.frame and len(command) >= 1:
line_num = int(command)
context = lldb.frame.GetSymbolContext (lldb.eSymbolContextEverything)
if context and context.GetCompileUnit():
compile_unit = context.GetCompileUnit()
line_index = compile_unit.FindLineEntryIndex (0, line_num, compile_unit.GetFileSpec(), False)
target_line = compile_unit.GetLineEntryAtIndex (line_index)
if target_line and target_line.GetStartAddress().IsValid():
addr = target_line.GetStartAddress().GetLoadAddress (lldb.target)
if addr != lldb.LLDB_INVALID_ADDRESS:
if lldb.frame.SetPC (addr):
print "PC has been set to 0x%x for %s:%d" % (addr, target_line.GetFileSpec().GetFilename(), target_line.GetLine())
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f %s.jump jump' % __name__)
我把它放在我保存 lldb, 的 Python 命令的目录中~/lldb/
,然后将它加载到我的~/.lldbinit
文件中
command script import ~/lldb/jump.py
现在我有一个命令jump
(j
works),它将跳转到给定的行号。例如
(lldb) j 5
PC has been set to 0x100000f0f for a.c:5
(lldb)
如果您将这个新命令加载到文件中,该新jump
命令将在命令行 lldb 和 Xcode 中可用~/.lldbinit
——您需要使用 Xcode 中的调试器控制台窗格来移动 pc,而不是在编辑器窗口中移动指示器。
于 2013-07-14T21:44:39.680 回答
0
您可以使用 lldb 命令移动 lldb 中的程序计数器 (pc) register write pc
。但它是基于指令的。
这里有一个很好的 lldb/gdb 比较,可用作 lldb 概述。
于 2013-07-11T21:27:43.830 回答