c++ - 无法使用 Boost stacktrace + backtrace 获取行号

标签 c++ boost stack-trace backtrace

我正在尝试重现第一个也是最简单的 example在 Boost Stacktrace 文档中。

#define BOOST_STACKTRACE_USE_BACKTRACE

#include <boost/stacktrace.hpp>
#include <iostream>

void bar(int n) {
    if (n <= 0) {
        // ... somewhere inside the `bar(int)` function that is called recursively:
        std::cout << boost::stacktrace::stacktrace();
        return;
    }
    bar(n-1);
}

int main() {
    bar(4);
}

我只取得了部分成功:我得到了函数名称,但没有得到行:

 0# bar(int) in ./plain_vanilla
 1# bar(int) in ./plain_vanilla
 2# bar(int) in ./plain_vanilla
 3# bar(int) in ./plain_vanilla
 4# bar(int) in ./plain_vanilla
 5# main in ./plain_vanilla
 6# __libc_start_main at ../csu/libc-start.c:342
 7# _start in ./plain_vanilla

(我的源文件名为 plain_vanilla.cpp,我的可执行文件为 plain_vanilla。)我使用的是我在 Devuan 3.0 上构建的 Boost 1.73.0 GNU/Linux。 libbacktrace 已安装(它是 glibc 的一部分)并且我正在链接它。

这更有可能是我做错了什么,还是库中的一个实际错误?

最佳答案

要在堆栈跟踪中获取更多信息,请使用调试版本。 对于 GCC,使用标志 -g-fno-omit-frame-pointer 编译项目。

关于c++ - 无法使用 Boost stacktrace + backtrace 获取行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62973197/

相关文章:

c++ - 如何使用 boost C++ 反序列化对和对象的 vector

c++ - SIGSEGV 使用 gdb 时无法获取堆栈跟踪

javascript - Google Chrome 中的源映射是否会推送到 Error.stack

c++ - 如何在 C++ 中定义不同类型的变量?

C++ 生成的代码(来自 MATLAB)

c++ - 如何在 C++ 中的 X、Y 位置启动 CMD 屏幕

c++ - 如何防止 boost::optional<T> 被错误地构造为 0?

c++ - Visual Studio 2013 (vs120) 要求错误的 boost 库

c++ - 将 boost::shared_ptr 与 WSACleanup 结合使用

java - Stacktrace 的异常仅包含 Java 库调用