【问题标题】:Tracing function calls in C++ using gdb使用 gdb 在 C++ 中跟踪函数调用
【发布时间】:2012-02-29 13:38:08
【问题描述】:

我有一个在 Linux 平台上用 C++ 开发的系统。我正在对这个系统进行一些调试。我想查找对函数的完整函数调用序列。假设函数按以下顺序调用

function_1 -> function_2 -> function_3 -> function_4

如果我在 function_4 处设置一个断点,执行将在该点暂停。我想看看function_1、function_2和function_3在function_4之前被调用。是否有任何 gdb 命令来跟踪这些函数调用?

谢谢, 安库尔

【问题讨论】:

  • 是 function_1 被调用然后返回 - 还是 function_1 调用 function_2() 等
  • RTFM:类似于“bt”或“st”(回溯或堆栈跟踪)。
  • bt 获取回溯,但它依赖于堆栈帧,因此除非所有这些函数调用都是嵌套的(1 调用 2 调用 3 调用 4),否则这对你不起作用。

标签: c++ debugging gdb callstack


【解决方案1】:

你想要一个回溯。 gdb 命令bt 将准确显示您感兴趣的内容。

【讨论】:

  • bt 实用程序在 Linux 服务器上不可用。使用gdb找不到函数调用吗?
  • 另外,要检查调用堆栈,请使用命令“frame”或 f。更多信息在这里:ofb.net/gnu/gdb/gdb_43.html#SEC43
  • 谢谢哥们,bt 工作。这正是我一直在寻找的。谢谢。
【解决方案2】:
【解决方案3】:

如果 function_1() 调用 function_2() 而后者又调用 function_3() 等等

您可以在 function_4() 中设置断点并使用命令

where

打印堆栈的回溯

另一个可能有用的工具是带有 callgrind 工具的 valgrind

【讨论】:

  • 谢谢阿德里安,这行得通。它与bt完全相似。谢谢
猜你喜欢
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多