linux程序设计笔记10:gdb调试
2012-03-19 18:39
716 查看
1.在程序中遇到错误时,要重新阅读源代码或与其他人进行探讨,这个办法虽然因为简单而容易被人忽视,但它却非常有效。
2.建议大家启用-Wall 选项,他在追踪程序的错误时,它可以产生非常有用的信息。
3.__LINE__ __FILE__ __DATE__ __TIME__ 4个对调试很有帮助的宏定义。
4.gcc -g 可以添加调试信息,但是文件会很大哦。
二.gdb调试:
gdb obj.exe
help 帮助
run 运行
backtrace 栈跟踪 bt 帮组我们找到程序到达错误地点的路径。 为了与其他调试程序兼容:gdb还有一个where命令与bt功能一致。
quit 退出gdb
printf 打印出变量值
gdb会用伪变量来保存类似这样的输出值以备后用:最后一次操作的结果总是为$,倒数第二次操作的结果为$$.
例如:print a[$-1].key
list 列出程序源代码, list n 指定列出代码的行的上下文。
break 21 设置断点。
cont 继续执行。
display arrar[0]@5
commands 命令:在达到断点时执行某个命令,而不是程序停下来。
三。使用gdb:给程序打补丁;
在不修改源代码的情况下,修改程序,并重新编译。
info display 查看曾经设置过的断点及display命令的内容。
info break 查看曾经设置过的断点
disable break 1
disable display 1 禁用这些设置,也可以全部删除。
commands 2 ?
set variable n=n+1
cont
end
run
以上是给程序打补丁,但是俺看不懂!!
1.注意:gdb所有的版本都支持“空命令”,即直接按下回车键再次执行最近执行过的那条命令。在使用step or next命令单步执行程序时,这个空命令就非常有用罗。
linux 和 unix 系统通常会产生一个核心转储(core dump ),并将它保存在core文件中,该文件是对程序的内存映像文件,包含程序在运行失败的那个时刻的全局变量的取值。 我们通过它查看错误信息哦。
二。断言。
他的作用是测试某个假设是否成立,如果不成立就停止程序的运行。
#include <assert.h>
void assert(int expression)
头文件 assert.h 受宏NDEBUG的影响,可以通过#define NDEBUG 来关闭断言功能 必须包含在#include <assert.h>之前哦。 或者在编译的时候 加上 -DNDEBUG 选项啦编译。
例子:
#include <stdio.h> #include <assert.h> #include <stdlib.h> #include <math.h>
double my_sqrt(double x){
assert(x>=0.0);
return sqrt(x);
}
int main(){
printf("%g",my_sqrt(-2.0));
exit(0);
}
GDB 调试
1.gcc -g XXX.c
2. gdb 执行文件名
3. list 查看源代码
4. break 函数名设置断点
5. next 程序执行一行代码
6. print 变量
7.程序 执行到函数 进入 函数调试
断点打到函数的行
break 2
这样 next 的含义 和step 相同
next 程序执行一行
step 程序执行一步
8. 可以直接调用函数
call 函数名(参数值)
9.程序中动态改变变量的值
set var 变量名=值
10多文件调试
1.可以先把断点打到 main文件上
然后用step 跟进调试文件
2.直接在调试文件上打断点
break 文件名:行号
准备一下匹配函数的写法
2.建议大家启用-Wall 选项,他在追踪程序的错误时,它可以产生非常有用的信息。
3.__LINE__ __FILE__ __DATE__ __TIME__ 4个对调试很有帮助的宏定义。
4.gcc -g 可以添加调试信息,但是文件会很大哦。
二.gdb调试:
gdb obj.exe
help 帮助
run 运行
backtrace 栈跟踪 bt 帮组我们找到程序到达错误地点的路径。 为了与其他调试程序兼容:gdb还有一个where命令与bt功能一致。
quit 退出gdb
printf 打印出变量值
gdb会用伪变量来保存类似这样的输出值以备后用:最后一次操作的结果总是为$,倒数第二次操作的结果为$$.
例如:print a[$-1].key
list 列出程序源代码, list n 指定列出代码的行的上下文。
break 21 设置断点。
cont 继续执行。
display arrar[0]@5
commands 命令:在达到断点时执行某个命令,而不是程序停下来。
三。使用gdb:给程序打补丁;
在不修改源代码的情况下,修改程序,并重新编译。
info display 查看曾经设置过的断点及display命令的内容。
info break 查看曾经设置过的断点
disable break 1
disable display 1 禁用这些设置,也可以全部删除。
commands 2 ?
set variable n=n+1
cont
end
run
以上是给程序打补丁,但是俺看不懂!!
1.注意:gdb所有的版本都支持“空命令”,即直接按下回车键再次执行最近执行过的那条命令。在使用step or next命令单步执行程序时,这个空命令就非常有用罗。
linux 和 unix 系统通常会产生一个核心转储(core dump ),并将它保存在core文件中,该文件是对程序的内存映像文件,包含程序在运行失败的那个时刻的全局变量的取值。 我们通过它查看错误信息哦。
二。断言。
他的作用是测试某个假设是否成立,如果不成立就停止程序的运行。
#include <assert.h>
void assert(int expression)
头文件 assert.h 受宏NDEBUG的影响,可以通过#define NDEBUG 来关闭断言功能 必须包含在#include <assert.h>之前哦。 或者在编译的时候 加上 -DNDEBUG 选项啦编译。
例子:
#include <stdio.h> #include <assert.h> #include <stdlib.h> #include <math.h>
double my_sqrt(double x){
assert(x>=0.0);
return sqrt(x);
}
int main(){
printf("%g",my_sqrt(-2.0));
exit(0);
}
GDB 调试
1.gcc -g XXX.c
2. gdb 执行文件名
3. list 查看源代码
4. break 函数名设置断点
5. next 程序执行一行代码
6. print 变量
7.程序 执行到函数 进入 函数调试
断点打到函数的行
break 2
这样 next 的含义 和step 相同
next 程序执行一行
step 程序执行一步
8. 可以直接调用函数
call 函数名(参数值)
9.程序中动态改变变量的值
set var 变量名=值
10多文件调试
1.可以先把断点打到 main文件上
然后用step 跟进调试文件
2.直接在调试文件上打断点
break 文件名:行号
准备一下匹配函数的写法
相关文章推荐
- linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误
- [Linux程序设计][调试][gdb]
- Linux笔记 程序调试gdb
- linux调试程序利器 GDB学习笔记
- linux入门笔记GDB调试
- Linux程序设计笔记(第10章 调试)
- Linux-Ubuntu下gdb调试笔记
- linux应用编程笔记(1)gdb调试方法及如何找出dbg.c程序中的错误
- 学习笔记 --- LINUX应用调试之使用GDB
- linux下C++ gdb调试笔记
- linux环境gdb调试工具学习笔记
- linux笔记(gcc及gdb调试)
- 2012.3.1 linux学习笔记 GDB调试方法
- linux笔记(gcc及gdb调试)
- Linux下C/C++语言的调试 gdb工具 笔记
- 【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)
- VisualGDB系列10:快速调试Linux应用程序
- js高级程序设计笔记10--canvas绘图
- linux gdb调试动态库(so)的方法
- Emacs+GDB远程调试ARM-LINUX程序