在C语言编程中如何在两个函数之间找到执行函数

在C语言编程中如何在两个函数之间找到执行函数,c,function,gdb,C,Function,Gdb,我知道两个函数func_1和func_5,但在func_1和func_5之间确实有一些函数,我不知道这些函数是什么,现在我的问题是我的程序正在运行func_1,但没有到达func_5,当我运行gdb时,我的程序正在崩溃,但我没有任何回溯详细信息,因为我的程序正在停止 现在我怎么知道它在哪里,在哪个函数中崩溃,我怀疑在这两个函数func_1和func_5之间,是否有函数造成了崩溃 [Inferior 1 (process 23939) exited with code 01] (gdb) bt N

我知道两个函数func_1和func_5,但在func_1和func_5之间确实有一些函数,我不知道这些函数是什么,现在我的问题是我的程序正在运行func_1,但没有到达func_5,当我运行gdb时,我的程序正在崩溃,但我没有任何回溯详细信息,因为我的程序正在停止

现在我怎么知道它在哪里,在哪个函数中崩溃,我怀疑在这两个函数func_1和func_5之间,是否有函数造成了崩溃

[Inferior 1 (process 23939) exited with code 01]
(gdb) bt
No stack.

有人能告诉我怎么做吗?

既然你使用gdb,
rbreak
backtrace
会有帮助

例如:

/* demo.c */
#include <stdio.h>

void fn1(void) { puts("Hello"); }
void fn2(void) { fn1(); }
void fn3(void) { fn2(); }
 
int main(void)
{
    fn3();
    return 0;
}
创建一个脚本来自动化任务,使用以下内容将其命名为
trace.gdb
(名称不重要):

set pagination off
rbreak demo.c:.
command
silent
backtrace 1
continue
end

run
现在运行命令:

gdb -quiet -command=trace.gdb ./demo
输出为:

Reading symbols from ./demo...done.
Breakpoint 1 at 0x40053a: file demo.c, line 3.
void fn1(void);
Breakpoint 2 at 0x40054b: file demo.c, line 4.
void fn2(void);
Breakpoint 3 at 0x400556: file demo.c, line 5.
void fn3(void);
Breakpoint 4 at 0x400561: file demo.c, line 9.
int main(void);
#0  main () at demo.c:9
#0  fn3 () at demo.c:5
#0  fn2 () at demo.c:4
#0  fn1 () at demo.c:3
Hello

您的问题非常不清楚,您的问题并显示了一些代码,甚至是伪代码。如果您的程序在gdb下运行时崩溃,您应该能够获得一个堆栈跟踪,告诉您它在哪里用命令
bt
崩溃。我回滚了您上次的编辑,前一句很好。为什么单步执行不可行?bt显示“无堆栈”,因为程序没有运行,所以停止。如果我有英国电信的详细资料,那么没有任何意义张贴这个问题。
Reading symbols from ./demo...done.
Breakpoint 1 at 0x40053a: file demo.c, line 3.
void fn1(void);
Breakpoint 2 at 0x40054b: file demo.c, line 4.
void fn2(void);
Breakpoint 3 at 0x400556: file demo.c, line 5.
void fn3(void);
Breakpoint 4 at 0x400561: file demo.c, line 9.
int main(void);
#0  main () at demo.c:9
#0  fn3 () at demo.c:5
#0  fn2 () at demo.c:4
#0  fn1 () at demo.c:3
Hello