c++中跟踪函数调用的方法

method to trace function call in C++

本文关键字:方法 函数调用 跟踪 c++      更新时间:2023-10-16

我正在使用一个大型软件包,它没有任何一致的方法错误处理。我看到这样的错误信息:

ERROR: stupid message

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

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

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

我不能触摸somefunc的代码,所以我想我必须使用valgrind或类似的东西来找到违规的函数调用,但我不知道如何做到这一点。我使用Linux系统并使用g++编译我的代码,但我不能更改或重新编译包含somefunc的代码部分。有什么建议吗?

这里有一些技巧(工具)可以帮助你:

使用调试器

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

生成呼叫树

一些文档工具,如氧,可以生成一个"调用者"answers"被调用者"的图形。您可以使用它们搜索可能的执行路径。