c++ - 无法使用 Boost stacktrace + backtrace 获取行号
问题描述
我正在尝试重现 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 GNU/Linux 上使用我构建的 Boost 1.73.0。libbacktrace 已安装(它是 glibc 的一部分),我正在链接它。
这更有可能是我做错了什么,还是图书馆中的实际错误?
解决方案
要在堆栈跟踪中获取更多信息,请使用调试构建。对于 GCC,使用标志-g
或-fno-omit-frame-pointer
.
推荐阅读
- javascript - 是什么原因造成的:未捕获的 TypeError: $ is not a function?
- puppeteer-sharp - GetPropertyAsync 冻结
- html - 超链接不会重定向到来自同一项目的视图
- python - 正则表达式查找仅收集数组上的最后一个元素
- c# - 使用 Visual Studio Code 的 AutoCad .net 项目
- javascript - Mongoose - 从集合中返回所有项目(没有搜索参数)时,集合中返回的项目不包含它们的 mongo _id
- python - Python pandas DF 问题:尝试删除列但没有任何反应(df.drop) - 代码也运行没有任何错误
- tizen - Tizen webapp 地理定位
- vue.js - 在路线更改时停止整页重新渲染?(Nuxt.js)
- git - 由于未跟踪文件的文件大小限制,Git 远程被拒绝(预接收挂钩被拒绝)