【问题标题】:How to track where destructor get called - C++ [duplicate]如何跟踪调用析构函数的位置 - C++ [重复]
【发布时间】:2014-06-25 02:23:06
【问题描述】:

我想知道 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 宏似乎只适用于函数而不是结构和类。 reference。任何在结构和类中工作的宏?

【问题讨论】:

标签: c++ class oop destructor


【解决方案1】:

虽然可用性取决于平台和编译器,但您可以使用回溯库:

  • 使用 gcc 编译器(Linux 或 MacOS X)在 C++ 中显示堆栈跟踪:

    包含“execinfo.h”并使用回溯 -> 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

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2013-04-17
    相关资源
    最近更新 更多