【问题标题】:How to set breakpoints when a function returns with LLDB Python?当函数使用 LLDB Python 返回时如何设置断点?
【发布时间】:2023-04-05 21:26:02
【问题描述】:

我是 LLDB 调试器的新手。我想问一下我们是否有一些方法可以使用 Python API 自动分析源代码并在函数的返回处设置断点?

谢谢。

【问题讨论】:

  • 试试lldb.debugger.HandleCommand?
  • 嗨盖伦,谢谢您的回复。但是debugger.HandleCommand 用于执行命令并仅获取其结果。我想知道我们是否可以使用 LLDB 来分析程序的源代码或其他中间表示,以确定函数的返回位置并在这些位置设置断点。

标签: python breakpoints lldb


【解决方案1】:

一种方法是在“return”上使用源表达式断点:

(lldb) break set -p return -X <FunctionName>

根据您是否在函数的其他地方使用“返回”,您可能必须禁用某些单独的位置。

如果您在使用链接寄存器(例如 arm 或 arm64)的架构上并且您在函数中停止,您可以中断链接寄存器值。

否则,您可以获得该函数的反汇编(SBFrame::GetFunction() 将为您提供 SBFunction,而 SBFunction::GetInstructions 将返回指令列表,您可以扫描在返回指令上设置断点(例如x86_64 上的 retq 等)。

lldb 对源代码没有太多的语义理解,但是通过指令扫描或架构知识(如 lr...)实现“从函数返回”断点会很有用。在 bugs.llvm.org 提交增强请求,也许有人会实施它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多