GDB调试和常见段错误

时间:2021-12-16 15:32:07

1.基本命令

1)进入GDB  #gdb test

  test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。

2)查看源码  (gdb) l

  源码会进行行号提示。

  如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这个函数的定义及查看附近的其他源码。或者:使用断点或单步运行,到某个函数处使用s进入这个函数。

3)设置断点  (gdb) b 6  /break 6

  这样会在运行到源码第6行时停止,可以查看变量的值、堆栈情况等;这个行号是gdb的行号。

 4)查看断点处情况  (gdb) info b /info break

  可以键入"info b"来查看断点处情况,可以设置多个断点;

5)运行代码  (gdb) r  /run

6)显示变量值  (gdb) p n

  在程序暂停时,键入"p 变量名"(print)即可;

  GDB在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;

7)观察变量  (gdb) watch n

 在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;

8)单步运行  (gdb) n /next

9)程序继续运行  (gdb) c /continue

  使程序继续往下运行,直到再次遇到断点或程序结束;

10)退出GDB  (gdb) q /quit

常见的段错误常由于以下问题引起:
1) 访问 系统数据区,尤其是往系统保护的 内存地址写数据最常见就是给一个指针以0地址。
2) 内存越界( 数组越界,变量类型不一致等): 访问到不属于你的内存区域。
这里附上调试方法教程:摘自百度百科。
http://baike.baidu.com/link?url=hpCWNX2jTvanRxi6U9COegwcsLUHEVsj6995KQXprTAb_cZJtW1LvQ4m3wAPbQJa3GdxBbr8YDBvK8E0JisI7iixodBUA1C4enIOpsI0fD4pGArv4Wr0Uvs_4gNXcZ-Z