【问题标题】:How to obtain the stack trace but also initialized variables in C++? [closed]如何在 C++ 中获取堆栈跟踪以及初始化变量? [关闭]
【发布时间】:2015-07-11 13:56:49
【问题描述】:

您遇到了某些需要打印应用程序活动的情况,例如,您已获得源代码并希望按顺序获得调用的方法集、初始化的变量以及应用程序的任何活动。程序。获取堆栈跟踪以及应用程序活动的完整报告的最建议和最实用的工具是什么?

【问题讨论】:

  • 此类检查最常用的工具是工具链的调试器。
  • 你试过什么?显示一些与您的问题相关的源代码?您正在使用什么工具链(什么操作系统、什么编译器、什么优化标志)?对于什么样的软件,您提出了非常广泛的问题?请编辑您的问题以改进它并激发它!
  • 顺便说一句,我发现您的问题的表述非常困难。如果你和我一样,是一个非英语为母语的人,你能不能试着写几个 shorter 句子......并解释 why 你在问......提供更多背景和细节。
  • 只有我一个人无法解析和理解第一句话的全部内容(3 行长!!!)?

标签: c++


【解决方案1】:

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

处理此类事情的适当工具称为debugger。细节是构建链,即特定于实现。我专注于使用 GCC 的 Linux 工具。

在 Linux 上,您将使用 g++ -Wall -Wextra -g3(或只是 g++ -Wall -g)进行编译,并使用 gdb 作为调试器。也许你想要watchpoints

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

如果您的问题与程序对当前continuationcall stackstack trace(或其他类似reflection 的活动)的程序化自省有关,这在标准 C++11,但您可以考虑使用 GNU glibc 的 backtracing functions 或使用 Ian Taylor 在 GCC 中的 libbacktrace 或者可能是 GCC 的 return address related builtins

您可能还想使用一些profilerperfoprofilegprof)...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2010-09-23
    • 2011-06-01
    • 2016-09-03
    相关资源
    最近更新 更多