LLDB如何实现设置断点功能?

时间:2018-08-01 09:48:44

标签: c++ llvm breakpoints lldb dwarf

我想通过LLDB实现设置断点功能,我已经阅读了lldb源代码并了解了实现的一部分。我的问题是在哪里实现源代码集断点? lldb如何与DWARF交互?

1 个答案:

答案 0 :(得分:1)

这类问题可能更适合解决lldb-dev邮件列表(lldb-dev@lists.llvm.org)。如果您最终想做的事情要提交给lldb,则无论如何都需要在这里进行讨论...

但是,简单地说:lldb Breakpoint的处理实际设置断点的部分是断点搜索内核。 lldb中用于断点设置的搜索内核始终是BreakpointResolver类的子类。您可以在BreakpointResolver.h中阅读评论,以获取有关其工作原理的更多详细信息。文件和行断点设置解析器是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的使用之前,您可能想要这样做。