如何在CPP文件中为所有函数设置断点

lldb - how to set breakpoint for all functions in cpp file

本文关键字:函数 设置 断点 CPP 文件      更新时间:2023-10-16

我正在尝试通过一个大项目>100k loc,但只关心与lib的交互。是否有一种方法可以让lldb在一个源文件中中断所有函数声明?

到目前为止,我已经尝试了

br s -f <file> --func-regex .*

包含从GDB到LLDB的信息和GDB解决方案,但这似乎在文件中的所有函数调用上都被打破,导致4911行源文件的5129匹配

一个可能的解决方案是通过

进行源正则表达式匹配来查找函数调用

但是考虑到c++荒谬的解析规则,一个匹配所有大小写的正则表达式是不可能的。

-f规范确实将断点搜索限制在由<file>定义的编译单元中,因此它最终包括该编译单元包含的所有模板实例化,如果您使用任何std::的东西通常是很多,如您所发现的。

调试器通常不知道函数在哪里被声明(它是调试信息的一部分),所以我们可以添加一个选项,将-f视为"声明文件"而不是"comp单元名称"。然后你可以这样说:

(lldb) break set -f foo.h -f foo.cpp --match-declaration-file --func-regex .*

这将是相当直接的添加。如果你有这种倾向,请提交一个增强请求到http://bugreporter.apple.com。

如果你遵循这样写函数的惯例:

void A::foo()
{
  ...
}

然后你可以对"^{"做一个源正则表达式。这就是这种编码约定的主要原因,它使得函数的开头非常容易挑选。

如果模板实例化主要来自std,您可以找到.o文件并执行如下操作(这是在OS X上):

$ nm <file-basename>.o -s __TEXT __text -j | c++filt | grep -v std

这将生成此.o文件中的非std函数列表,然后您可以将break set -n添加到每行的开头,并将其添加到。

中。