代码之家  ›  专栏  ›  技术社区  ›  Stephan Lechner

lldb命令跳转:在当前函数之外恢复?

  •  1
  • Stephan Lechner  · 技术社区  · 8 年前

    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 (忽略可能的副作用)?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Jim Ingham    8 年前

    jump 是一个包装器命令,用于包装底层 thread jump 变成紧凑的形式。这就是所有 _regex- 命令在lldb中。做:

    (lldb) help command regex
    

    如果你想了解这个正则表达式命令的更多细节,当然

    (lldb) help thread jump
    

    你能用这个命令做的一切。

    包装器没有允许跳出当前函数的功能,因为这绝对不是一个安全的操作,因此默认情况下,假设您在键入行或文件名时出错。。。

    基础命令没有 --force 选项,允许您将电脑移出当前功能。