【发布时间】:2019-01-08 20:15:15
【问题描述】:
我想通过LLDB实现set-breakpoints功能,我已经阅读了lldb源代码并且理解了部分实现。我的问题是源代码设置断点在哪里实现? lldb 如何与 DWARF 交互?
【问题讨论】:
标签: c++ llvm breakpoints lldb dwarf
我想通过LLDB实现set-breakpoints功能,我已经阅读了lldb源代码并且理解了部分实现。我的问题是源代码设置断点在哪里实现? lldb 如何与 DWARF 交互?
【问题讨论】:
标签: c++ llvm breakpoints lldb dwarf
这类问题可能更适合向 lldb-dev 邮件列表 (lldb-dev@lists.llvm.org) 提出。如果你最终做了一些你想提交给 lldb 的事情,无论如何你都需要在那里讨论......
但是,简而言之:lldb Breakpoint 中处理实际设置断点的部分是断点搜索内核。 lldb 中用于断点设置的搜索内核始终是 BreakpointResolver 类的子类。您可以阅读 BreakpointResolver.h 中的 cmets,了解有关其工作原理的更多详细信息。 File & Line 断点设置解析器是 BreakpointResolverFileLine(在 BreakpointResolverFileLine.cpp 中)。
然后这个 Target::CreateBreakpoint: 的重载
lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules,
const FileSpec &file, uint32_t line_no,
lldb::addr_t offset,
LazyBool check_inlines,
LazyBool skip_prologue, bool internal,
bool request_hardware,
LazyBool move_to_nearest_code);
用于获取文件和行断点的规范并构造适当的 BreakpointResolver,并从中创建一个断点。最后,CommandObjectBreakpoint::CommandObjectBreakpointSet 编组命令行参数并将它们传递给适当的 Target::CreateBreakpoint 函数,以便从命令行创建断点。
询问“lldb 如何与 DWARF 交互”有点过于分散,无法给出连贯的答案。 DWARF 有很多活动部件,lldb 在很多方面使用 DWARF……你能更具体地问你想知道什么吗?顺便说一句,如果您还没有仔细阅读 DWARF 规范(来自 http://dwarfstd.org),您可能希望在深入了解 lldb 对 DWARF 的使用之前先阅读一下。
【讨论】: