How to debug a program(1)

来源:互联网 发布:淘宝卖家怎么删差评 编辑:程序博客网 时间:2024/06/15 16:14

一、程序调试:
1,静态调试
2,动态调试:“分段隔离”、“设置断点”、“跟踪打印”

二、GDB下:

1、可以使用几种方式来暂停程序:断点,观察点,捕捉点,信号,线程停止。
     ①设置断点:
           a、b(break) + [源代码行号]/[源代码函数名]/[内存地址]/[变量]
           b、b(break) ... if condition(condition可以是上述任一参数,如果condition是真,程序到达指定行或函数时停止)。
                例如:在循环体中可以设置break ... if i = 100 来设置循环次数。
     ②删除断点:
          a、delete
              用法:delete + [breakpoints num]/[range]
              delete可删除单个断点,也可删除一个断点的集合。
              例如:delete 5、delete 1-10、将所有的断点删除: delete breakpoint 。
          b、clear
              用法:clear + [源代码行号][源代码函数名][文件名]
              删除所在行的所有断点。
              例如:clear XXX.c:5 (删除XXX第5行的断点)、clear 12 。

2、r(run)

3、当程序被暂停后,可以使用continue、next、setp来继续执行程序:
     continue 执行到下一暂停点或程序结束。
     next 执行下一行不进入函数内部。
     setp 执行下一行进入函数内部。

4、查看数据:
    a、print variable 查看变量
         print *array@len 查看数组(array是数组指针,len是需要数据长度)
        可以通过添加参数来设置输出格式:
            /x 按十六进制格式显示变量。
            /d 按十进制格式显示变量。
    b、whatis 命令可以显示某个变量的类型

5、查看寄存器、内存:
    a、display + [格式] [内存]/[表达式]
    每当程序暂停时,显示内存或表达式内容(to display each time your program stops)

    display + *array @ n (显示0~n-1的内容)
l $pc : 程序计数器
l $fp : 帧指针(当前堆栈帧)
l $sp : 栈指针
l $ps : 处理器状态
    格式:/c、/i 、/x (???区别???)

GDB常用命令表

 

GDB回溯


三、eclipse 下:

口吃男教你DDDebug
  

原创粉丝点击