lldb - 如何为cpp文件中的所有函数设置断点

时间:2016-10-07 02:11:01

标签: c++ debugging lldb

我正试图通过一个大项目> 100k loc,但只关心与lib的交互。有没有办法让lldb打破一次源文件中的所有函数声明?

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

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

来自gdb to lldbgdb solution的信息,但这似乎打破了文件中的所有函数调用,导致4911行源文件的5129匹配。

可能的解决方案是进行源正则表达式匹配以通过

查找函数调用

br s -f --source-pattern-regexp

但鉴于C ++的荒谬解析规则,一个匹配所有情况的正则表达式是不可能的。

1 个答案:

答案 0 :(得分:2)

GET /private HTTP/1.1 Host: <My Machine Name>:8000 Authorization: Bearer <Access Token> Content-Type: application/json Cache-Control: no-cache Postman-Token: 87dd4307-2a1c-b36e-0377-129cf60b676d 规范确实将断点搜索限制为由{ "statusCode": 400, "error": "Bad Request", "message": "Bad HTTP authentication header format" } 定义的编译单元,因此它最终包括编译单元包含的所有模板实例,如果使用任何{{1}正如你所发现的那样,东西通常很多。

调试器通常知道声明函数的位置(它是调试信息的一部分)所以我们可以添加一个选项来将-f视为&#34;声明文件&#34;不是&#34; comp单位名称&#34;。然后你可以这样说:

-f

这很简单。如果您愿意,请向http://bugreporter.apple.com提交针对此效果的增强请求。

如果您遵循编写以下功能的惯例:

<file>

然后你就可以在&#34; ^ {&#34;上做一个源正则表达式。这是编码约定的主要原因,它使函数的开头很容易被选中。

如果模板实例主要来自std,你可以找到.o文件并做类似的事情(这是在OS X上):

std::

这将生成此.o文件中的非std函数列表,然后您可以将(lldb) break set -f foo.h -f foo.cpp --match-declaration-file --func-regex .* 添加到每行的开头并将其输入。