boost::stacktrace 未能提供行号
boost::stacktrace fails to provide line number
我在获取 boost::stacktrace 提供的堆栈帧的行号时遇到问题。当使用 boost::stacktrace::to_string
打印任务时,它会打印行号,但是当调用 source_line()
时,它会 returns 0.
示例:
auto frame = boost::stacktrace::stacktrace()[0];
std::cout << frame << std::endl;
std::cout << frame.source_file() << ":" << frame.source_line();
Outut:
foo::bar() at /some/path/to/file/file.cc:24
/some/path/to/file/file.cc:
是否有任何解决方案,或者我是否必须进行一些手动字符串操作才能获取行号?
我在 Ubuntu 18.04 上得到了相同的行为,具有完整的调试信息。
正在使用
strace -f -e execve,clone,fork,waitpid ./sotest
显示正在执行的命令是
[pid 5972] execve("/usr/bin/addr2line", ["/usr/bin/addr2line", "-e", "./sotest", "0x000055EC1854F7FF"], 0x7fff8e99bdd8 /* 82 vars */) = 0
确实,手动检查
/usr/bin/addr2line -e ./sotest 0x000055EC1854F7FF
版画
??:0
我不知道这是为什么,因为调试信息非常多(甚至在 -g -O0 -fno-omit-frame-pointer
):
$ file sotest
sotest: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=53bae8898d711d1946ac4cb805740b11aa1cc045, with debug_info, not stripped
解决方法?
我在 libbacktrace
后端取得了更大的成功
#define BOOST_STACKTRACE_USE_BACKTRACE
打印
$ ./sotest
foo::bar() at /home/sehe/Projects/Whosebug/test.cpp:8
/home/sehe/Projects/Whosebug/test.cpp:8
当然这需要链接回溯库。但这似乎是标准 Ubuntu 安装的一部分。
我在获取 boost::stacktrace 提供的堆栈帧的行号时遇到问题。当使用 boost::stacktrace::to_string
打印任务时,它会打印行号,但是当调用 source_line()
时,它会 returns 0.
示例:
auto frame = boost::stacktrace::stacktrace()[0];
std::cout << frame << std::endl;
std::cout << frame.source_file() << ":" << frame.source_line();
Outut:
foo::bar() at /some/path/to/file/file.cc:24
/some/path/to/file/file.cc:
是否有任何解决方案,或者我是否必须进行一些手动字符串操作才能获取行号?
我在 Ubuntu 18.04 上得到了相同的行为,具有完整的调试信息。
正在使用
strace -f -e execve,clone,fork,waitpid ./sotest
显示正在执行的命令是
[pid 5972] execve("/usr/bin/addr2line", ["/usr/bin/addr2line", "-e", "./sotest", "0x000055EC1854F7FF"], 0x7fff8e99bdd8 /* 82 vars */) = 0
确实,手动检查
/usr/bin/addr2line -e ./sotest 0x000055EC1854F7FF
版画
??:0
我不知道这是为什么,因为调试信息非常多(甚至在 -g -O0 -fno-omit-frame-pointer
):
$ file sotest
sotest: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=53bae8898d711d1946ac4cb805740b11aa1cc045, with debug_info, not stripped
解决方法?
我在 libbacktrace
后端取得了更大的成功
#define BOOST_STACKTRACE_USE_BACKTRACE
打印
$ ./sotest
foo::bar() at /home/sehe/Projects/Whosebug/test.cpp:8
/home/sehe/Projects/Whosebug/test.cpp:8
当然这需要链接回溯库。但这似乎是标准 Ubuntu 安装的一部分。