8+GDB调试器及调试方法
- 格式:pdf
- 大小:256.43 KB
- 文档页数:18
内存出错的GDB调试
•
利用core文件直接定位出错代码
GDB命令
• • • • • • • • • • • •
whatis 显示变量或函数类型 break 在代码里设置断点, 这将使程序执行到这里时被挂起. info break 显示当前断点清单,包括到达断点处的次数等。 info files 显示被调试文件的详细信息。 info func 显示所有的函数名称。 info local 显示当函数中的局部变量信息。 info prog 显示被调试程序的执行状态。 delete [n] 删除第n个断点 disable[n] 关闭第n个断点 enable[n] 开启第n个断点 set variable 设置变量的值
基本的GDB调试
•
这是一个错误的程序
基本的GDB调试
• •
尝试调试运行程序,GDB在收到信号SIGSEGV后停止运行 gcc test.c –g –o badc
基本的GDB调试
•
利用whatis查看变量的类型
基本的GDB调试
• 利用print命令可以了解程序崩溃时,i值为多少。 • 通过print ary[i]指令能明确说明程序不能访问指定的内存
Linux应用开发
3 Sept. 2008 © Neusoft Confidential
GDB介绍
调试器使用:
• • • •
监视程序中变量的值 设置断点以使程序在指定的代码行上停止执行 单步执行代码 检测内存中的数据
GDB调试流程
编写源程序(vi…) gcc –g的方式进行编译
打开GDB (gdb…)
• 充分利用别名功能
内存出错的GDB调试
•
常见的段错误
•
出错程序代码
内存出错的GDB调试
当我们的程式崩溃时,内核有可能把该程式当前内存映射到 core文件里,方便程式员找到程式出现问题的地方。 • 利用core文件进行出错文件的调试,首先使用ulimit –c来设定产 生core文件的容量,0为不产生core文件,然后执行通过gdb进行 调试
•
GDB命令
• • • • • • • • • • •
•
file kill list next step run break c quit watch print shell
装入想要调试的可执行文件. 终止正在调试的程序. 列出产生执行文件的源代码的一部分. 执行一行源代码但不进入函数内部. 执行一行源代码而且进入函数内部. 执行当前被调试的程序 在代码里设置断点, 这将使程序执行到这里时被挂起. 继续运行程序 终止 gdb 使你能监视一个变量的值而不管它何时被改变. 查看变量的值 使你能不离开 gdb 就执行 UNIX shell 命令
打开预调试文件(file…)来自设置断点( break )
运行( run )
退出( quit )
GDB的使用
•
为使程序能被调试,需要gcc编译时用 -g 选项为程 序编译时添加调试信息
例如:gcc –g –o helloworld helloworld.c
GDB的使用
•
在命令行上键入 gdb 并按回车键就可以运行 gdb 了, 如果一切正常的话, gdb 将被启动并且你将在屏幕上看 到类似的内容:
GDB的内部命令
象大多数复杂Linux程序一样,GDB是通过内部命令来完成调试工 作的。 • help命令可以例出gdb的命令种类,如果要看种类中的命令,可 以使用help <class> 命令,如:help breakpoints,查看设置断点的 所有命令。也可以直接help <command>来查看命令的帮助。 • gdb中,输入命令时,可以不用打全命令,只用打命令的前几个 字符就可以了,当然,命令的前几个字符应该要标志着一个唯一 的命令 • 在gdb下,你可以敲击两次TAB键来补齐命令的全称,如果有重 复的,那么gdb会把其例出来。
基本的GDB调试
基本的GDB调试
(gdb) disassemble func 查看源码的汇编
break 的使用:
根据行号设置断点 (gdb) break linenum 根据函数名设置断点 (gdb) break funcname 执行非当前源文件的某行或某函数时停止执行 (gdb) break filename:linenum (gdb) break filename:funcname