繁体   English   中英

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

[英]How does LLDB implement the set breakpoint function?

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

此类问题可能更适合解决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的使用之前先做一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM