首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLDB -自动步进并打印行列表,直到断点

LLDB -自动步进并打印行列表,直到断点
EN

Stack Overflow用户
提问于 2021-02-21 09:07:55
回答 1查看 96关注 0票数 0

我想继续执行以下命令:

代码语言:javascript
复制
(lldb) s

直到它到达断点。或者仅仅是当它达到某个功能时(例如,read())

在此过程中,我希望按执行的顺序保存行号列表(以及文件的完整路径)。因此,对于例如。保存为如下所示的文件(LOG.csv):

代码语言:javascript
复制
Number;LineNumber;FilePath
1;1080;/Users/user/Documents/zDEVELOP/bash-3.2.57/shell.c
2;1082;/Users/user/Documents/zDEVELOP/bash-3.2.57/shell.c
3;1083;/Users/user/Documents/zDEVELOP/bash-3.2.57/shell.c
4;40;/Users/user/Documents/zDEVELOP/bash-3.2.57/readline.c 
5;71;/Users/user/Documents/zDEVELOP/bash-3.2.57/lib/readline/readline.c 
6;72;/Users/user/Documents/zDEVELOP/bash-3.2.57/lib/readline/readline.c

**注意需要文件的完整路径。参见第4行与第5行,它们实际上来自2个具有相同名称的不同文件。**Number是指执行的顺序。

格式将类似于上面,但最好是可以自定义的。

**如果可能的话,我还想先运行程序直到某个断点,然后单步执行到另一个断点。

这应该怎么做呢?我可以使用Python API或C API吗?其他方法也是可能的。

有关API的答案,请提及使用哪个类和方法(1)单步执行(2)检索当前行(3)检索完整文件路径(4)检查是否已到达函数read()

EN

回答 1

Stack Overflow用户

发布于 2021-02-23 04:46:00

有两种方法可以做到这一点。第一种方法是直接在脚本解释器REPL中使用Python (在lldb中使用script命令输入)。然后,在Python REPL中,您可以编写一个while循环,该循环执行您想执行的任何打印操作,检查您的停止条件,如果不满足,则在您要跟踪的线程上调用SBThread.StepInto或StepOver。

更多关于lldb Python API的信息在这里:

https://lldb.llvm.org/python_api.html

您需要注意的一件事是lldb的调试器有两种运行模式“同步”和“异步”。如果调试器处于“同步”模式,则使被调试程序运行的任何命令都会等待返回,直到被调试程序出于某种原因停止。在“异步”模式下,"SBThread.StepInto“、"SBThread.StepOver”等方法会立即返回,您可以使用lldb的事件系统来通知停止。前者对于您的任务来说要方便得多,因此在script会话开始时只需执行以下操作:

代码语言:javascript
复制
>>> lldb.debugger.SetAsync(False)

您还可以将此逻辑打包到基于Python的命令中,如果这样使用起来更方便的话。

更奇妙的方法是使用lldb“脚本化步骤”计划。这里有几个使用方法的例子:

https://github.com/llvm/llvm-project/blob/main/lldb/examples/python/scripted_step.py

文件开头的头部有一些关于这是如何工作的解释,这里有更多的文档:

https://lldb.llvm.org/use/python-reference.html#using-the-python-api-to-create-custom-stepping-logic

虽然设置有点令人生畏,但由于您只是回复了几条简单的消息,一旦您弄清楚了它是如何工作的,最终实现起来通常都相当简单。

另一件要记住的事情是,在lldb的python解释器中运行的所有代码都共享lldb控制台。因此,如果在您编写的一些代码中调用pdb调试器,您将在控制台中看到pdb提示符,并可以查看变量和逐步执行python代码。例如,插入:

代码语言:javascript
复制
import pdb; pdb.set_trace()

在代码中的某处设置断点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66298178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档