C++ C++;23-stacktrace_入门类的好处是什么?

C++ C++;23-stacktrace_入门类的好处是什么?,c++,c++23,C++,C++23,当头文件中的这个类被添加到语言中时,我们能够更容易地处理哪些问题,计划替换哪些语法?下面我分享一个我从网站上得到的代码 Classstd::stacktrace\u条目 namespace std { class stacktrace_entry { public: using native_handle_type = /* implementation-defined */; // constructors

当头文件中的这个类被添加到语言中时,我们能够更容易地处理哪些问题,计划替换哪些语法?下面我分享一个我从网站上得到的代码

Class
std::stacktrace\u条目

 namespace std {
      class stacktrace_entry {
      public:
        using native_handle_type = /* implementation-defined */;
     
        // constructors
        constexpr stacktrace_entry() noexcept;
        constexpr stacktrace_entry(const stacktrace_entry& other) noexcept;
        constexpr stacktrace_entry& operator=(const stacktrace_entry& other) noexcept;
     
        ~stacktrace_entry();
     
        // observers
        constexpr native_handle_type native_handle() const noexcept;
        constexpr explicit operator bool() const noexcept;
     
        // query
        string description() const;
        string source_file() const;
        uint_least32_t source_line() const;
     
        // comparison
        friend constexpr bool operator==(const stacktrace_entry& x,
                                         const stacktrace_entry& y) noexcept;
        friend constexpr strong_ordering operator<=>(const stacktrace_entry& x,
                                                     const stacktrace_entry& y) noexcept;
      };
    }
名称空间std{
类stacktrace\u条目{
公众:
使用本机句柄类型=/*实现定义的*/;
//建设者
constexpr stacktrace_entry()noexcept;
constexpr stacktrace_条目(const stacktrace_条目和其他)无例外;
constexpr stacktrace_条目和运算符=(const stacktrace_条目和其他)无异常;
~stacktrace_entry();
//观察员
constexpr native_handle_type native_handle()const noexcept;
constexpr显式运算符bool()const noexcept;
//质疑
字符串描述()常量;
字符串源文件()常量;
uint_least32_t source_u line()常量;
//比较
friend constexpr bool运算符==(const stacktrace_entry&x,
const stacktrace_entry&y)无异常;
friend constexpr强排序运算符(const stacktrace_entry&x,
const stacktrace_entry&y)无异常;
};
}

当你用调试器附加到C++程序并停止执行时,一个相对容易做的事情(用一些编译时的仪器)是在给定的点上完成代码的调用堆栈。 一般来说,C++的实现是调用栈是一个链表(可能以非平凡的方式存储),当你从函数返回时,跳转到调用方在调用它时注入的位置。 <> >这些地址可以由调试器解码,然后可以将指令位置映射回C++源位置,并可以生成如何获得这行代码的漂亮打印。根据优化设置,此信息有时可能不准确、缺少某些帧或完全没有意义;但它非常有用

即使没有编译时指令插入,也可以保存指令指针链,然后使用编译时指令插入的人可以很好地对其进行解码

<>有一些库允许C++程序在内部进行,而不需要外部调试器。其中包括boost stacktrace的库

这是将该功能添加到
std
库中

堆栈跟踪是一系列帧,这些帧可以通过这个新的标准库映射到源文件、函数名和行号信息


一个典型的用例可能是捕捉程序在C++源代码中以无效的方式运行的情况,并生成一个日志来报告它,然后再尝试退出。然后,程序员可以查看此堆栈跟踪并获得有关如何修复该错误的信息。

查看建议:您知道什么是堆栈跟踪或回溯跟踪吗?@NathanOliver感谢您的精彩文章