问题标签 [boost-stacktrace]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
705 浏览

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

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

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

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

这更有可能是我做错了什么,还是图书馆中的实际错误?

0 投票
1 回答
37 浏览

c++ - 如何确定为 boost::stacktrace::safe_dump_to 分配多少空间?

我正在查看boost::stacktrace::safe_dump_toAPI,但我终其一生都无法确定如何确定为safe_dump_to()调用分配多少空间。如果我通过(nullptr, 0),它只是返回0,所以不是这样。我可以猜到一些常数,但我怎么知道这就足够了?

0 投票
1 回答
61 浏览

c++ - 理解堆栈跟踪

我一直在尝试调试导致分段错误的服务问题。我无权访问生产服务器,因此我在服务中处理了 SIGSEGV 信号并在日志文件中打印了堆栈跟踪。以下是服务崩溃时的堆栈跟踪

但是,此跟踪没有多大用处,因为我无法在代码中查明问题发生的位置。有人可以帮助我更好地理解和检查这个堆栈跟踪吗?

0 投票
1 回答
117 浏览

c++ - 人类可读的 boost::stacktrace::safe_dump 输出

我正在尝试使用 boost::stacktrace 设置堆栈跟踪日志信号处理程序。Boost 文档建议:

但是,该文件的输出是二进制格式,文档似乎没有提到如何阅读,除了使用boost::stacktrace::from_dump. 我从另一个 SO 答案(和函数文档)中找到的一种替代方法是使用od -tx8 -An <dumpfile>,但它的输出似乎仍然不适合人类阅读。Coliru 片段

有没有办法使用标准的 linux 工具来读取这个文件?

0 投票
1 回答
132 浏览

c++ - 在带有 MinGW64 的 Windows 上使用 BOOST_STACKTRACE_USE_BACKTRACE

我正在使用 Windows 和 MinGW64 构建 Qt 应用程序。我需要使用 Boost Stacktrace 来生成堆栈跟踪,就像应用程序的 Linux 构建已经完成的那样。

相应的开关BOOST_STACKTRACE_USE_BACKTRACE(如https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html中所述)已设置,并且在 Linux 上一切正常。

但是在 Windows 上,libbacktrace缺少该库。上面的 boost 页面包含两个指向源的链接,libbacktrace但我找不到适用于 Windows/MinGW 的预构建二进制文件,也找不到适合我的环境的任何构建说明或使用文档。

如何使用BOOST_STACKTRACE_USE_BACKTRACEWindows/MinGW64?

0 投票
0 回答
76 浏览

c++ - 在 Release 构建中,为什么 boost::stacktrace::stacktrace() 仅当绝对 PDB 文件路径位于 exe/dll 文件中时才会生成解码的堆栈跟踪?

我正在使用 Microsoft Visual Studio 2017 开发一个 C++ 项目。boost::stacktrace::stacktrace()当应用程序崩溃时,我们使用 API 生成函数堆栈跟踪。

最近我在 Release 版本中注意到,当生成 PDB 文件时,它的绝对路径嵌入到 exe/dll 文件中。如果 PDB 文件存在于该路径并且应用程序崩溃,则生成的堆栈跟踪将被解码,即由实际函数名称组成。如果 PDB 文件不在该路径中,则对堆栈跟踪进行编码,即它仅包含一些十六进制堆栈地址。

然后我发现我们可以使用链接器选项删除exe/dll文件中的PDB目录路径,只保留它的基本名称,即PDB文件名/PDBALTPATH:%_PDB%

我使用前面提到的链接器选项并通过将PDB文件而不更改其名称放在同一目录中的exe / dll文件旁边进行了实验,并且我预计会生成解码的堆栈跟踪,因为exe中的新PDB路径/dll 文件应被解释为相对路径。但是当应用程序现在崩溃时,生成的堆栈跟踪会被编码。

为什么boost:stacktrace::stacktrace()在前面提到的案例中没有找到 PDB 文件?

0 投票
1 回答
54 浏览

c++ - boost::stacktrace 无法提供行号

我在获取 boost::stacktrace 提供的堆栈帧的行号时遇到问题。使用它打印任务时boost::stacktrace::to_string会打印行号,但调用 source_line()它时返回 0。

例子:

有什么解决方案还是我必须进行一些手动字符串操作才能获取行号?

0 投票
1 回答
92 浏览

c++ - 如何在 C++23 中使用堆栈跟踪引发异常?

C++23 可能会通过标头引入堆栈跟踪机制<stacktrace>

我知道我们要上一std::stack_trace堂课,由他们组成std::stacktrace_entry,这一切都很好。但是 - 仅仅存在这不会有太大帮助,因为每个人都必须煞费苦心地确保他们总是收集堆栈跟踪并将其放入他们抛出的异常中。那就是……没有。

相反,我想要的是让每个 (?) 异常自动携带一个堆栈跟踪,这样当我检查或打印它时,或者即使它在没有被捕获时自动打印,堆栈跟踪也会被打印出来。

这是否计划成为可能,还是我要求太多?