如何挂进lldb?

时间:2017-06-19 11:23:46

标签: python lldb

主要的开放性问题是:如何将LLDB与转换为C / C ++的语言结合使用。我想要的是用python脚本挂钩到默认的LLDB函数,以便它

  • 拦截符号demangling,以便lldb在堆栈跟踪和更好的本地/全局变量名称中显示更好的函数名称。
  • 拦截数据格式以处理其名称未提前知道的类型,因此type summary add无法处理。应该通过检查结构来执行“匹配”。
  • 拦截“创建断点”请求,来源于原始语言文件,而不是C / C ++将其映射到正确的源/行。

最终目标是向LLDB提供一个python脚本来支持它,以便众多UI LLDB前端(XCode,VSCode等)自动从中受益。

编辑:我设法通过从所有SBCompileModule中获取所有类型,检查它们并提供syntetic格式化程序来解决类型问题。符号“demangling”和断点映射仍然是个问题。

1 个答案:

答案 0 :(得分:1)

您还可以添加与.*匹配的正则表达式匹配格式化程序。由于lldb将首先尝试所有非正则表达式匹配器,因此不会取代内置格式化程序。正则表达式匹配器比静态模式匹配慢,但可能仍然可以接受,如果应用程序很大,可能不会比在应用程序中为每种类型添加一个格式化程序更糟糕。这可能更容易实现。

您可以使用script.thread.python_function& script.frame.python线程&帧格式(此处描述:http://lldb.llvm.org/formats.html)用于自定义回溯打印 - 包括您的解码 - 以回溯输出。

没有办法从Python提供自定义demangler。而且,符号打印不是通过格式化程序完成的。框架打印是,所以没有办法干预。我无法从外面看到一个好方法。

目前还没有一种可插入的方法来在Python中编写断点解析器内核,尽管lldb旨在允许这样做。但是,如果你可以让你的代码转换器发出#file& #line声明进入C / C ++源代码,这些重映射将进入调试信息,以便lldb可以接收它们。