如何跟踪析构函数被调用的位置- c++
How to track where destructor get called - C++
我想知道在c++中是否有任何预定义的宏或可以追溯到析构函数触发的地方的东西?
可以是这样的:
class myClass{
myClass();
~myClass();
};
myClass::~myClass(){
printf("Object destroyed in %s.n", __TRACEBACKMACRO__);
}
int main(){
myClass tempClass;
return 0;
}
它应该输出如下内容:
Object destroyed in main().
最好同时输出作用域和名称空间信息。
附加信息:FUNCTION或func宏似乎只能在函数中工作,而不能在结构体和类中工作。参考。有在结构和类中工作的宏吗?
您可以使用backtrace库,但其可用性取决于平台和编译器:
-
使用gcc编译器(Linux或MacOS X)在c++中显示堆栈跟踪:
包含"execinfo.h"并使用backtrace -> backtrace_symbols -> __cxa_demangle
与Windows: 包含StackWalker.h并使用StackWalker类
请查看这篇文章http://oroboro.com/stack-trace-on-crash/,了解更多详情。
或者您可以使用Boost。Call_stack: http://melintea.github.io/Boost-Call_stack/index.html
相关文章:
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 非常量调用 const 成员函数失败,只读位置C++
- 为同一存储位置调用构造函数两次是否合法?
- 向量如何在特定位置调用复制构造函数
- 调用 GetPointerFrameTouchInfo时出现错误 998(对内存位置的无效访问)
- 在我的 BST 实现中,我的 findNode 函数没有将父位置返回给其调用函数
- 调用隔离后访问冲突执行位置0x0000000000000000:New()
- 即使在同一类型上,也可以将击曲线调用新的位置
- C 11中的怪异RNG行为在定义并在不同的位置进行调用
- 从新位置调用函数时C 细分故障
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 内存集调用位置的"error: expected constructor, destructor, or type conversion before '(' token"
- 发生 JNI 调用 c++ dll "不满意链接错误: 对内存位置的无效访问"
- 可以't更改船舶位置,函数调用不起作用
- 在dll中调用LoadLibrary的位置
- 如何使用Google测试在Main()函数中的特定位置调用特定的测试功能
- std::unique_ptr的自定义deleter是手动调用析构函数的有效位置吗
- 调用std::vector::empty()时内存访问冲突读取位置
- 没有调用位置释放函数
- 如何在调用位置替换内联函数代码