如何获得堆栈跟踪,并在c++中初始化变量

How to obtain the stack trace but also initialized variables in C++?

本文关键字:c++ 初始化 变量 并在 何获得 堆栈 跟踪      更新时间:2023-10-16

您会遇到想要打印应用程序活动的某些情况,例如您已经获得了源代码,并且想要获得按顺序调用的方法集,初始化的变量和程序的任何活动。获得堆栈跟踪和应用程序活动的完整报告的最推荐和最实用的工具是什么?

你问题的第一句话太长了,我听不懂;我不能完全解析它,我只是猜测你想问什么。

适合做这些事情的工具叫做调试器。细节是构建链的,即特定于实现的。我专注于使用GCC的Linux工具。

在Linux上,您将使用g++ -Wall -Wextra -g3(或仅使用g++ -Wall -g)进行编译,并使用gdb作为调试器。也许你需要监视点。

gdb的最新版本可以在Python甚至Guile中编写脚本(或可扩展)。因此,如果您的系统的gdb太旧而无法扩展,那么从其下载的源代码构建一个最新的gdb可能是值得的。

如果你的问题与你的程序对其当前的延续或调用堆栈或堆栈跟踪(或其他类似反射的活动)的程序性自省有关,这在标准 c++ 11中是不容易做到的,但是你可以考虑GNU glibc的反向跟踪函数或使用Ian Taylor在GCC中的libbacktrace或GCC的返回地址相关的内置函数。

您可能还想使用一些分析器(perf, oprofile, gprof)…