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
的代码部分。有什么建议吗?
这里有一些技巧(工具)可以帮助你:
使用调试器
在输出语句处设置一个断点。当到达断点时,打印回退跟踪或查看调用堆栈。
生成呼叫树
一些文档工具,如氧,可以生成一个"调用者"answers"被调用者"的图形。您可以使用它们搜索可能的执行路径。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++11:模板方法的模板函数调用无法编译?
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 有没有一种简单的方法来调用带有默认参数的函数?
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 是否有一种方法可以调用一个函数,而不会创建变量,而不会创建变量
- 有没有一种单行方法来调用集合上的 lambda 函数
- 使用 emplace_back 避免移动构造函数调用的最佳方法?
- 如何从具有多个对象/字段的类中调用方法函数
- 简化静态成员函数调用的方法
- 对静态重载(类)函数/方法的调用是不明确的
- 在 C++ vs Java 中从构造函数调用被覆盖的方法
- 从C++中的虚拟析构函数调用虚拟方法
- 在类方法内调用lambda函数中的类方法
- 子类中的方法不会被父类中的虚函数调用
- 在其赋值运算符方法中调用对象的析构函数
- 默认参数允许构造函数调用私有方法
- 调试可视化工具在预览中使用成员方法/函数调用