[英]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.