程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了LLDB - 自动步进并打印行列表,直到断点大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决LLDB - 自动步进并打印行列表,直到断点?

开发过程中遇到LLDB - 自动步进并打印行列表,直到断点的问题如何解决?下面主要结合日常开发的经验,给出你关于LLDB - 自动步进并打印行列表,直到断点的解决方法建议,希望对你解决LLDB - 自动步进并打印行列表,直到断点有所启发或帮助;

我想继续执行以下命令:

(lldb) s

直到它到达断点。或者只是当它到达某个函数时(例如 read())

在发生这种情况时,我想按照执行顺序保存行号列表(以及文件的完整路径)。所以对于例如。保存到如下所示的文件 (LOG.csv):

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 行 VS 第 5 行,它们实际上来自 2 个具有相同名称的不同文件。 **数字是指执行的顺序。

格式与上面类似,但最好可以自定义。

**如果可能,我还想先将程序运行到某个断点,然后再步进到另一个断点。

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

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

解决方法

有两种方法可以做到这一点。第一种是直接在脚本解释器 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 会话开始时只需执行以下操作:

>>> 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 代码。例如。插入:

import pdb; pdb.set_trace()

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

大佬总结

以上是大佬教程为你收集整理的LLDB - 自动步进并打印行列表,直到断点全部内容,希望文章能够帮你解决LLDB - 自动步进并打印行列表,直到断点所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: