gdb入门笔记
来源:互联网 发布:软件编程学费 编辑:程序博客网 时间:2024/05/18 03:35
要想搞开发不学点调试还是不行的。拖了好久,今天要行动了~
1.为了可以在gdb中调试,在gcc编译阶段要加上-g的参数,如想编译mian.c生成test的执行文件,可以输入下面命令
gcc -g mian.c -o test;
如果没有-g,你将看不见程序的函数名、变量名,所代替的全是 运行时的内存地址。当你用 -g把调试信息加入之后,
并成功编译目标代码以后,就可以用gdb进行调试了。
2.在gdb中调试test的方法是:gdb test;
进入gdb调试之后,首先要设置断点,如果直接运行run会执行到程序的末尾;还可以进入gdb后通过file 命令来引入调试的程序,如test在目录/root 下,则file /root/test 也可达到同样效果。
a.设置断点的方式为
break <function>如在main函数设置断点,设置完成之后会有提示:
也可以指定源程序的某行设置断点,如break 10:会在程序的第十行设置断点
info breakpoint可以查看当前所有断点以及断点的情况,可以用disable与enable来分别设置取消和恢复某个断点,注意disable与enable的参数应该为info breakpiont命令中个断点对应的那个数字标号。delete 某个标号则直接删除了这个断点
break filename:linenum可以设置某个文件的某行为断点,list function可以查看特定函数的源码信息。
b.下面输入run命令就可以运行这个程序到main函数了,如果在run之前没有设置断点,则会一直执行程序,直到输出结果;
run命令还可以指定参数到标准输入,如run 1 2 3 4会向test传递四个参数。还可以通过set args来设定运行时参数,通过show args来查看当前参数。
c.运行到断点breakpoint后,step表示单步执行,如果在程序中调用其他函数,会跳出当前调试函数跟踪;next表示执行下一条语句,如果在程序中调用其他函数不会跳出该当前函数跟踪,也就是所有调用的函数都只是一个运算符对待。stepi和nexti是上面两个指令的汇编调试,每次只执行一条汇编语句。step与next后面都可以加上数字,表示一次执行的指令数。通过
d.通过bt可以查看当前函数调用的情况,finish可以一步跳出当前被执行函数,return到调用当前函数的函数,until可以一步执行完当前的循环体,continue可从当前位置继续执行到下一个断点位置。info stack与bt效果一样
e.print指令可以打印变量/表达式的值,如print a会打印出在当前范围内有效的变量a的值,另外print *a@num 命令可以打印出以a收地址的num长度的连续内存区域中的内容,
用display可以显示一些自动显示的变量,当程序停住或单步执行时,这些变量的值会自动打印。非常有用的一条display语句是 display /i $PC其中/i参数表示按汇编格式输出,pc为全局变量,为执行的指令,所以可以看到源代码与汇编相对应的输出。info display可以查看当前自动打印的信息,disable display dnum可以将当前打印取消,disable display dnum可以将当前打印恢复,undisplay dnum为取消某个自动打印,disable display dnum与undispaly dnum的打印效果一样,如果说区别,在于是否可以还将dnum对应的选项保留在display自动打印的选项中,可以通过info display来查看,dnum为某表达式在info display 中对应的数标。watch var设置观察点,当程序执行时,如果var变化时,会停止程序执行,打印变量信息,并等待下调gdb指令。rwatch是变量被读时暂停执行程序,awatch是在变量被读或者被写时暂停程序。info watchpoint 可以查看当前所有观察点。
print可以打印三种变量:全局变量--所有文件可见;静态变量--当前文件可见;局域变量--当前区域可见。
info local可以打印当前所有局部变量。
f.在help 后加指令名可以查看所有指令的用法。
- gdb入门笔记
- 【GDB调试学习笔记】GDB调试入门
- linux入门笔记GDB调试
- GDB 入门
- GDB入门
- gdb入门
- GDB入门
- gdb 入门
- gdb入门
- gdb入门
- gdb笔记
- gdb笔记
- GDB 笔记
- GDB笔记
- gdb笔记
- gdb入门-GDB使用指南
- gdb入门知识
- GDB超简单入门
- 基本数据类型对象包装类
- 重构摘要4_构筑测试体系
- c++调用Python
- android中CallBack的理解
- 大数据笔记
- gdb入门笔记
- Linux字符集的修改方法
- 模式、框架、架构、平台之间的区别
- 增强现实---AR
- UDP与TCP区别
- 打开word时,出现“向程序发送命令时出现问题”的解决方法
- linux下libevent安装配置与简介 以及 linux库文件搜索路径的配置
- 2014中国计算机网络安全年会
- 极米CEO钟波:电视智能之后将是无屏化