用C ++跟踪函数调用的方法

时间:2016-07-05 16:21:43

标签: c++ valgrind

我使用的大型软件包没有任何一致的方法错误处理。我看到如下错误消息:

ERROR: stupid message

现在,使用grep等,我能够找到发出此消息的函数,即

void somefunc(Arg1 arg1, Arg2 arg2, ...){
  // ...
  std::cout << "ERROR: stupid message" << std::endl;
}

但是,我很难找到在我的用例中调用此函数的位置。如果这是一个异常或段错误,我可以看到堆栈跟踪 - 但是像这样,我有点迷失。

我无法触及somefunc的代码,所以我想我必须使用valgrind或类似的东西来查找有问题的函数调用,但我不会&# 39;不知道该怎么做。我使用Linux系统并使用g++编译我的代码,但我无法更改或重新编译包含somefunc的代码部分。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

以下是一些可以帮助您的技巧(工具):

使用调试器

在输出语句处放置一个断点。 到达断点时,打印后退跟踪或查看调用堆栈。

生成调用树

某些文档工具(如Doxygen)可以生成“调用者”和“被调用者”图。您可以使用它们来搜索可能的执行路径。