c - 如何在 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.
请谁能告诉我如何解决这个问题?
解决方案
既然你用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
推荐阅读
- python-3.x - Python Flask 和 Jinja2 - 如何从日期获取当天的名称?
- xamarin.forms - 列表不显示项目
- amazon-web-services - Amazon cognito 基本功能问题
- c++ - 错误 C++:“const_iterator”没有命名类型;
- python - 如何访问 xmlns 命名空间 webservices 中的请求响应?
- java - 我试图用java中的分隔符输入来制作凯撒密码
- mysql - MySQL分配一个空值
- postgresql - 无法连接到 PostgreSQL docker 映像(使用转发端口)
- node.js - no-unused-var eslint 用于 nestsjs 中的模块和类型
- css - 更改 Material-UI 选择组件的边框颜色