在 C++ 中跟踪函数调用的方法
method to trace function call in C++
我使用的大型软件包没有任何一致的方法错误处理。我看到这样的错误消息:
ERROR: stupid message
现在,使用 grep
等,我能够找到发出此消息的函数,即
void somefunc(Arg1 arg1, Arg2 arg2, ...){
// ...
std::cout << "ERROR: stupid message" << std::endl;
}
但是,我很难找出在我的用例中调用此函数的位置。如果这是异常或段错误,我可以看到堆栈跟踪 - 但像这样,我有点迷路了。
我无法触及 somefunc
的代码,所以我想我必须使用 valgrind
或类似的东西来找到有问题的函数调用,但我不知道这该怎么做。我正在使用 Linux 系统并使用 g++
编译我的代码,但我无法更改或重新编译包含 somefunc
的代码部分。有什么建议吗?
这里有一些技巧(工具)可以帮助您:
使用调试器
在输出语句处放置一个断点。
到达断点时,打印回溯或查看调用堆栈。
生成调用树
一些文档工具,如 Doxygen,可以生成 "caller" 和 "callee" 图表。您可以使用这些来搜索可能的执行路径。
我使用的大型软件包没有任何一致的方法错误处理。我看到这样的错误消息:
ERROR: stupid message
现在,使用 grep
等,我能够找到发出此消息的函数,即
void somefunc(Arg1 arg1, Arg2 arg2, ...){
// ...
std::cout << "ERROR: stupid message" << std::endl;
}
但是,我很难找出在我的用例中调用此函数的位置。如果这是异常或段错误,我可以看到堆栈跟踪 - 但像这样,我有点迷路了。
我无法触及 somefunc
的代码,所以我想我必须使用 valgrind
或类似的东西来找到有问题的函数调用,但我不知道这该怎么做。我正在使用 Linux 系统并使用 g++
编译我的代码,但我无法更改或重新编译包含 somefunc
的代码部分。有什么建议吗?
这里有一些技巧(工具)可以帮助您:
使用调试器
在输出语句处放置一个断点。 到达断点时,打印回溯或查看调用堆栈。
生成调用树
一些文档工具,如 Doxygen,可以生成 "caller" 和 "callee" 图表。您可以使用这些来搜索可能的执行路径。