首页 > 解决方案 > 如何在 C 编程中的两个函数之间找到正在执行的函数

问题描述

我知道两个函数 func_1 和 func_5,但是在 func_1 和 func_5 之间肯定有一些函数我不知道这些函数是什么现在我的问题是我的程序正在达到 func_1 但没有达到我的程序之间的某个地方的 funct_5 得到当我运行 gdb 时崩溃,但由于我的程序停止,我没有任何回溯详细信息。

现在我怎么知道它在哪里以及在哪个函数中崩溃了,我怀疑在这两个函数 func_1 和 func_5 之间,某个函数正在造成崩溃。

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

请谁能告诉我如何解决这个问题?

标签: cfunctiongdb

解决方案


既然你用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;
}

-g使用标志编译:

 gcc -std=c11 -Wall -pedantic -g -o demo demo.c

创建一个脚本来自动化任务,调用它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

推荐阅读