gpt4 book ai didi

c++ - Boost 堆栈跟踪不显示函数名称和行号

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:43 50 4
gpt4 key购买 nike

我通过尝试一个简单的示例来探索 boost::stacktrace 来打印递归函数的调用堆栈。

#include "boost/stacktrace.hpp"

int factorial(int x){
if (x < 2) {
std::cout << boost::stacktrace::stacktrace();
return 1;
}
return x * factorial(x - 1);
}

int main(int ac, char *av[]) {
std::cout << factorial(4);
}

但是代码的输出不包含任何关于函数名和行号的信息:

 0# 0x000055A6F6B57C0F in /home/user/myapp
1# 0x000055A6F6B57C42 in /home/user/myapp
2# 0x000055A6F6B57C42 in /home/user/myapp
3# 0x000055A6F6B57C42 in /home/user/myapp
4# 0x000055A6F6B57C9D in /home/user/myapp
5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
6# 0x000055A6F6B57AEA in /home/user/myapp

这与 boost 网站的示例输出形成对比:(从 https://www.boost.org/doc/libs/1_68_0/doc/html/stacktrace/getting_started.html#stacktrace.getting_started.how_to_print_current_call_stack 复制)

0# bar(int) at /path/to/source/file.cpp:70
1# bar(int) at /path/to/source/file.cpp:70
2# bar(int) at /path/to/source/file.cpp:70
3# bar(int) at /path/to/source/file.cpp:70
4# main at /path/to/main.cpp:93
5# __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
6# _start

为什么我在堆栈跟踪输出中看不到源代码行号和函数名称?

我在我的项目级 CMakeList.txt 中启用了调试信息:

set(CMAKE_BUILD_TYPE Debug)

我还可以看到在分解二进制文件时出现了符号:

nm -an myapp | c++filt | grep factorial

0000000000000f40 t _GLOBAL__sub_I__Z9factoriali
00000000000010f0 T factorial(int)

最佳答案

您需要做一些事情(这是针对 Linux 的):

  1. 确保已启用调试信息:例如,-g

  2. 针对 libdl 的链接:-ldl

  3. 定义必要的宏之一(以获取行号):例如,-DBOOST_STACKTRACE_USE_ADDR2LINE

所有这些信息都在这里提供:

https://www.boost.org/doc/libs/1_69_0/doc/html/stacktrace/configuration_and_build.html

关于c++ - Boost 堆栈跟踪不显示函数名称和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583544/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com