日期:2014-05-16  浏览次数:20595 次

Linux gcc和gdb程序调试用法
Linux gcc和gdb程序调试用法
gcc一般调试格式:
gcc -Wall -o  test   test.c // -wall  显示程序错误详细信息     
gcc -v  // 显示gcc的版本
gcc -o{1,2,3} test  test.c // 1,2,3三个级别的优化,优化级别越高编译的时间越长
gcc -ggdb3 -Wall -o test  test.c // 运用gdb可以跟踪调试程序,运行这命令gdb告诉gcc,使用gdb扩展产生调试,其中3表示使用的第三级调试信息,程序员可以获得更多的信息。
如果程序有多个模块构成可以分别编译,然后再整体生成一个可执行的文件
gcc -o test1.c  //产生test1.o
gcc -o test2.c  //生成test2.o
gcc -o test3.c  //生成test3.o
gcc -o program test1.c test2.o test3.o  //生成program 最终可执行文件
关于gcc先这么多,以后用到,再补充。

gdb 符号调试器
gdb主要提供以下功能:
1. 监视程序中变量的值得变化
2. 设置断点,使程序在指定的代码行上暂停执行,便于观察
3. 单步执行代码
4. 分析崩溃程序产生core文件

是首先 
gcc -ggdb3 -Wall -o test  test.c  调试程序
./test  就是正常的执行程序
如果出现了不正确的结果,再用gdb调试
gdb test
出现(gdb)接口提示符
run  //开始运行程序,设置断点在开始运行之前,其他的命令都在运行程序下执行
step | s //单步执行,遇见函数就进入函数
next | n //单步执行,但不进入函数
quit | q  //退出gdb 

break LineNumber| functionName
continue | cont N // 表示跳过的断点数
tbreak  
LineNumber| functionName // 这只一个临时的断电,执行一次就自动删除
enable / disable  断点编号   // 回复失效的断点| 使有效的断点失效(如果操作多个断点,中间用空格分开)
clear  断点的行号
delete 断点的编号     clear/delete 都是清楚断点的,变量不一样啊
watch  逻辑表达式  // 此命令在程序run中运用,必须把main函数设置为断点,然后continue,程序停止在满足逻辑表达式地方。

查看栈的信息
bt  number  //如果number>0  表示显示栈顶上number数栈的信息   
                   //若果number<0  表示显示栈底上number数栈的信息
                  //省略则显示栈的全部信息
frame | f  n  // 显示第n层栈的信息   栈顶是0,一次类推
up <n> // 栈向上移n层  省略默认