首页 > 解决方案 > lldb 命令跳转:在当前函数之外恢复?

问题描述

LLDB 命令jump让我可以在与它停止的位置不同的位置恢复程序执行,但它似乎仅限于当前函数内的地址:

(lldb) jump CLI.cpp:15
error: CLI.cpp:15 is outside the current function.

我对此很好奇,因为这个限制没有记录在lldb的帮助中,并且语法jump <file>:<line>以某种方式表明可以使用任意入口点:

(lldb) help jump
     ('_regexp-jump')  Set the program counter to a new address.  Expects 'raw'
     input (see 'help raw-input'.)

Syntax: 
_regexp-jump <line>
_regexp-jump +<line-offset> | -<line-offset>
_regexp-jump <file>:<line>
_regexp-jump *<addr>

'jump' is an abbreviation for '_regexp-jump'

我知道在不同的帧/堆栈中恢复可能会使程序进入不一致的状态,并产生“奇妙”的副作用。

如何跳转到当前函数之外的行lldb(忽略可能的副作用)?

标签: xcodelldb

解决方案


jump是一个包装命令,它将底层的一些常见用途打包thread jump成一个紧凑的形式。这就是_regex-lldb 中的所有命令。做:

(lldb) help command regex

如果您想了解有关此正则表达式命令的更多详细信息,当然还有

(lldb) help thread jump

对于您可以使用该命令执行的所有操作。

包装器没有允许跳出当前函数的功能,因为这绝对不是一个安全的操作,所以默认是假设你在输入行或文件名时犯了错误......

底层命令确实有一个--force选项,允许您将 pc 移出当前功能。


推荐阅读