在我的工作中曾经尝试过使用gdb来编译python。
目前我了解到可以用gdb来跟踪C/C++程序的运行情况
1.编译程序
gcc swap.c -std=c99 -g
生成可执行程序a.exe (在linux下是a.out) 其中编译选项-g告诉编译器生成调试信息
2.运行gdb
gdb a.exe
gdb运行时会自动装入刚才生成的可执行程序
3.查看源码
(gdb) l
字母l是输入的命令,为list(列出程序清单)的缩写。
4.加断点并运行
(gdb) b 4
BreakPoint 1 at 0x401308: file swap.c, line 4
(gdb) r
Starting program: D:\a.exe
(etc..)
b命令把断点设置在第4行.r命令运行程序,碰到断点就停止
b swap命令也可以设置断点(swap是函数名),这样断点将设置在swap函数的开头
(etc..) 表示后面还有打印出来的信息,但笔者觉得写出来意义不大,因此省略
5.查看调用栈
(gdb) bt
#0 swap(a=4,b=3) at swap.c:4
#1 0x00401356 in main() at swap.c:8
(gdb) p a
$1 = 4
(gdb) up
#1 0x00401356 in main() at swap.c:8
8 swap(3,4);
(gdb) p a
$3 = 3
命令名 | 作用 |
---|---|
bt | 查看调用栈中所有的栈帧,其中#0为当前栈帧 |
p | 打印变量的指令,print的首字母缩写 |
up | 选择当前栈帧的上一个栈帧 |
q | 退出gdb |
s | 单步调试 |
网友评论