如何跟踪析构函数被调用的位置- c++

How to track where destructor get called - C++

本文关键字:调用 位置 c++ 析构函数 何跟踪 跟踪      更新时间:2023-10-16

我想知道在c++中是否有任何预定义的宏或可以追溯到析构函数触发的地方的东西?

可以是这样的:

    class myClass{
    myClass();
    ~myClass();
    };
    myClass::~myClass(){
        printf("Object destroyed in %s.n", __TRACEBACKMACRO__);
    }
    int main(){
    myClass tempClass;
    return 0;
    }

它应该输出如下内容:

    Object destroyed in main().

最好同时输出作用域和名称空间信息。

附加信息:FUNCTIONfunc宏似乎只能在函数中工作,而不能在结构体和类中工作。参考。有在结构和类中工作的宏吗?

您可以使用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