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