2012-02-08 76 views
2

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

function_1 -> function_2 -> function_3 -> function_4 

如果我把在function_4一个破发点,执行将在该点holded者。我希望看到在function_4之前调用了functions_1,function_2和function_3。如果有任何gdb命令跟踪这些函数调用?

感谢, ANKUR

+0

是否function_1被调用,然后返回 - 或做function_1调用function_2()等 – 2012-02-08 04:39:04

+0

RTFM:它的东西,如“BT”或“ST”(回溯追踪或堆栈跟踪)。 – John3136 2012-02-08 04:39:14

+1

'bt'获取回溯,但它依赖于堆栈帧,所以除非所有这些函数调用都是嵌套的(1次调用2次调用3次调用4次),否则这不适用于您。 – birryree 2012-02-08 04:41:27

回答

7

你要回溯。该gdb命令bt将准确显示您所感兴趣的东西

+0

bt实用程序在Linux服务器上不可用。这不可能找到使用gdb的函数调用吗? – user982740 2012-02-08 05:18:34

+1

我的意思是在'gdb'内,你需要输入命令'bt'。 – StilesCrisis 2012-02-08 05:21:24

+1

另外,要检查调用堆栈,请使用命令“frame”或f。更多信息在这里:http://www.ofb.net/gnu/gdb/gdb_43.html#SEC43 – fizzbuzz 2012-02-08 07:07:24

1

如果function_1()调用function_2()的调用function_3()等

您可以设置断点function_4()和使用命令

where 

要打印栈的回溯

可能有用的另一个工具是Valgrind的与callgrind工具

+0

谢谢阿德里安,这个工程。它与bt完全相似。谢谢 – user982740 2012-02-08 07:19:21