使用GDB调试程序,代码与实例
来源:互联网 发布:cdn源码 编辑:程序博客网 时间:2024/06/06 18:24
- GCC与Makefile
- gdb调试
GCC与Makefile
gcc方面的资料网上一大堆, 一般情况下,常用的参数有:
-S 编译为汇编代码
-c 编译为目标文件,不连接库
-E 只进行预处理
-o 指定输出文件的文件名
还有一个-g的命令:指示编译程序在目标代码中加入供调试程序gdb使用的附加信息。在使用gdb调试的时候加上这个选项。
有很多工具可以用来帮助我们生成Makefile。最出名的就是GNU的autoconf,GNU程序的编写,需要autoscan, aclocal, autoconf, automake这四个工具。GNU软件安装的三步曲是:./configure, make, make install。其中./configure就是根据autoconf, alocal等工具生成一个makefile文件。make指令就是调用make指令来根据makefile文件的规则来编译源程序。而make install就是执行makefile中的install规则指出的操作(一般是copy操作)。而make clean就是执行makefile中的clean规则指出的操作(一般是rm操作)。如果想编译出跨平台的C++程序,那么makefile是一种最方便的机制。
gdb调试
Windows下有多种IDE可以用来调试程序,Linux开发工具是多个独立的小工具,各自处理不同的问题,但是功能依然强大,常用gdb、cgdb、ddd等。
gdb调试时常用到的几个选项:
list 显示源文件:
list 没有参数,显示当前行之后或周围的10多行
list start,end 显示从行号start到end之间的代码行。print 查看运行时的数据
print i 显示当前变量i的值
print &i 显示变量i的存放地址
print array@5 显示从array(数组名)开始的5个值
print array[2]@3 显示从array第二个元素开始的3个数组元素的值
whatis i 显示变量i的数据类型设置断点 break
break linenum 在当前文件指定行linenum处设置断点
break function 在当前文件函数function的入口处设置断点显示断点 info
info breakpoints/break/watchpoints [num]
单步跟踪
step [N] 如果遇到函数调用,并且该函数编译时有调试信息,则会进入该函数内执行。
next [N] 遇到函数调用时,执行整个函数。
连续执行 continue 从当前行开始,连续执行到下一个断点处,或者到达该程序结束。命令中可以给出一个数字N,忽略其后N-1次断点运行程序 run
此外还有,clear(清除所有已定义的断点),delete(删除所有断点,后面可给出断点号码,多个断点用空格分开),disable(停用指定断点,停用多个则用空格分开),enable(激活被停用的断点,各断点号码用空格分开).
一个简单的例子:
#include <stdio.h> int main() { int a=0; int i=0; for(i=0; i<10; i++) { a+=i; } return 0; }
编译:
gcc -g -o main main.c
调试:gdb main
设置断点:
单步运行:
watch a
使用观察点后,每次被观察的变量发生变化,程序都会暂停。
此外,还可以设置捕捉点,信号,线程停止。
对于STL中的List、Vector的观察需要设置gdb,例如对于D*路径规划的简单例子的调试,变量mypath是list(state)类型,对它的观察要用:
plist mypath
提供一个设置文件(来自网络)gdbinit.txt
下载该文件到用户目录下,执行:
> mv gdbinit.txt .gdbinit
然后可以调试D*测试程序:
- 使用GDB调试程序,代码与实例
- GDB 调试程序 详解 使用实例
- gdb调试程序实例
- 使用gdb 调试程序
- 使用gdb调试程序
- 使用GDB 调试程序
- 使用GDB调试程序
- 使用gdb调试程序
- 使用GDB调试程序
- 使用GDB调试程序
- 使用gdb调试程序
- 使用GDB调试程序
- 使用GDB调试程序
- 使用GDB调试程序
- 使用gdb调试程序
- 使用GDB调试程序
- 使用GDB调试程序
- GDB调试及使用实例
- QT5 地图开发步骤
- ubuntu 安装 jdk
- SQLite 约束NOT NULL,DEFAULT,UNIQUE,PRIMARY KEY, CHECK
- jquery页面加载响应事件$(document).ready()与js页面加载响应事件window.onload()的区别
- 逻辑数据库设计
- 使用GDB调试程序,代码与实例
- 写在程序员转读博士第四年
- 算法训练 星际交流
- 动态规划--大盗阿福
- eclipse neon git 提交窗口太小问题
- LoadRunner 之 itoa() 函数
- hdu 2795
- POJ 2186Popular Cows(tarjan求连通分量+拓扑排序)
- 算法练习笔记(八)—— 树的BFS遍历