您的位置:首页 > 博客中心 > 数据库 >

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 : 查看常见的命令帮助

gxlsystem.com,布布扣

 

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

热门排行

今日推荐

热门手游