gdb初步窥探
时间:2022-03-10 17:22
本文是通过学习左耳朵皓帝的文章,详见:http://blog.csdn.net/haoel
1.使用gdb
gdb主要是用来调试c和c++程序,首先在编译前我们先把调试信息加到可执行程序当中,使用参数 -g 可以实现这一点。
dzhwen@deng:~/first$ gcc -g tst.c -o tst dzhwen@deng:~/first$ g++ -g tst.cpp -o tst
2.启动gdb
1.我们一般使用:gdb + 程序名字来启动gdb。
dzhwen@deng:~/first$ gdb tst
当然也不乏其他方法:
2、gdb
<program> core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。
3、gdb
<program> <PID>
如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。
3.常见的gdb
1.help : 查看常见的命令帮助
4.break + 数字 或者 break + 函数名 —— 设置断点
(gdb) break 15 Breakpoint 1 at 0x804841a: file tst.c, line 15. (gdb) break func Breakpoint 2 at 0x80483ea: file tst.c, line 5.
5.info + 信息 —— 查看各种信息
(gdb) info break —— 查看断点信息 Num Type Disp Enb Address What 1 breakpoint keep y 0x0804841a in main at tst.c:15 2 breakpoint keep y 0x080483ea in func at tst.c:5
6.run(简写r)—— 运行程序,遇到断点自动中断。
(gdb) run Starting program: /home/dzhwen/first/tst Breakpoint 1, main () at tst.c:16 16 long result = 0;
7.next(简写n) —— 单条语句执行。
(gdb) next 17 for(i = 1;i <= 100;++i)
8.continue —— 继续执行(直到下一个断点中止)
(gdb) continue Continuing. result[1-100] = 5050 Breakpoint 2, func (n=250) at tst.c:5 5 int sum = 0,i;
9.print(简写p) + 变量名 —— 打印变量的值,print命令简写。
(gdb) p sum $1 = 0 (gdb) n 6 for(i = 0;i < n;++i) (gdb) p i $2 = 1
10,bt —— 查看程序堆栈(包括main函数和其他调用的函数)
(gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048461 in main () at tst.c:23
11.finish —— 运行至函数退出
(gdb) finish Run till exit from #0 func (n=250) at tst.c:6 0x08048461 in main () at tst.c:23 23 printf("result[1-250] = %d\n",func(250)); Value returned is $7 = 31125
12.quit(简写q) —— 退出gdb
(gdb) quit
gdb初步就这些了吧,多多指教!
gdb初步窥探,布布扣,bubuko.com