常用GDB调试方法

上传人:do****y1 文档编号:179610850 上传时间:2023-01-02 格式:DOCX 页数:6 大小:18.11KB
返回 下载 相关 举报
常用GDB调试方法_第1页
第1页 / 共6页
常用GDB调试方法_第2页
第2页 / 共6页
常用GDB调试方法_第3页
第3页 / 共6页
点击查看更多>>
资源描述
1. 什么是 GDBGDB是GNU开源组织发布的一个强大的UNIX下的C/C+程序调试工具。虽然GDB自身 并没有Windows上大多数IDE的调试工具的高可视化和图形化功能,但命令行式调试也具 有其很大的优点,如果希望在GDB上提升可视化功能,可以使用vim的gdb插件对gdb进 行加强。顺便提一下调试程序的几大功能:a) 自定义方式启动程序;b) 可以设置断点,使程序在指定的断点处停住;c) 当程序停住时,可以查看程序的运行时数据;d) 可以修改程序的运行时数据;2. GDB与编译器的-g和-ggdb参数cc/gcc/g+使用-g参数可以在编译时利用操作系统的原生格式(native format)”生成调 试信息。这些信息GDB可以直接利用,当然其它的调试工具也能够直接利用。-g 参数是分级别的:a) -g2使用-g的默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量 信息。如果不使用,则只有内存地址信息,没有响应的标识信息;b) -g3包含级别-g2中的所有调试信息,以及源代码中定义的宏;c) -g1级别1(-g1)不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆 栈转储之用。回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以 原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。-ggdb参数能够为GDB生成更为丰富的调试信息,与-g相同,也有3个级别,如果希望 调试宏,则可以使用-ggdb3。但与-g不同的是,-ggdb生成的信息只能被GDB使用,而不能 被其它调试工具使用。3. 使用GDB启动调试使用 GDB 启动调试的方法有一下几种(只是关联上调试目标程序,并没有开始运行目标 程序):a) gdb 也就是你的执行文件,要在PATH环境变量下能搜索到,一般在当前目录 下;b) gdb core_file用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产 生的文件。启动后,gdb将加载core文件保存的堆栈信息,使用bt命令可以查看堆 栈信息,后面也将对此进行详细说明;c) gdb 用gdb调试正在运行的进程,是正在运行的进程ID。gdb能自动attach到这个 进程上,其中要在PATH环境变量下能够搜索到。也可以使用gdb attach ;4. 查看源代码 使用 list 命令,也可以使用缩写 l。list linenum 查看指定行linenum附近的代码。5. 设置断点(Breakpoint)GDB提供break命令来设置断点,有以下几种设置断点的方法:a) break 在进入指定函数时停住。C+中也可以使用class:function,或者类似 function(type,type)的方式来指定函数;b) break :在进入指定源文件的函数时停住。c) break 在运行到指定行时停住。d) break :在运行到指定源文件的指定行时停住。e) break 在当前行号的前后指定offset处停住,例如当前行为10,运行break +100表示在110 处设置断点,运行break -10则表示在90处设置断点;f) break *在程序运行到内存地址处停住。g) breakbreak 后什么都没有,表示在下一条指令处停住。h) break where if 在条件成立时停住。where冋以是上述任何break的参数,也可以不设置,不设置 则表示条件成立的下一条指令处停住。例如,break if i=100,表示当i等于100时停 住程序。i) commands command_listend为断点设置自动执行命令。例如:(gdb) commands 2print nend表示在第2个断点时,执行print n操作。6. 査看断点(Breakpoint)info breakpoints ninfo break ninfo b n以上n表示第n个断点,如果没有,则显示所有断点。7. 删除/修改断点(Breakpoint)GDB提供四个命令来维护断点:delete、clear、disable、enable。a) delete删除指定断点。delete breakpoint numdelete breakpoint num rangebreakpoint num为断点号,breakpoint num range为断点号范围。如果不指定断点 号,则为删除所有断点b) clear清除断点clear 清除当前位置断点clear :clear 清除指定函数位置上的断点clear :clear 清除指定行位置上的断点c) disable禁用断点,不删除。d) enable将禁用的断点启动。对于条件断点,可以使用condition (breakpoint num 修改断点条件。 可以使用ignorebreakpoint num 来忽略指定断点次& 设置观察点(Watchpoint)观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化, 马上停住程序。我们有下面的几种方法来设置观察点:a) watch 为表达式(变量)expr设置一个观察点。一量表达式值有变化时,马上停住程序。b) rwatch 当表达式(变量) expr 被读时,停住程序。c) awatch 当表达式(变量)的值被读或被写时,停住程序。9. 运行调试程序a) set args params 设置程序运行参数,例如 set args param1 param2b) run/r运行调试程序。10. 单步调试a) step/s count 单步跟踪,如果有函数调用,他会进入该函数。进入函数的前提是,此函数被编译 有debug信息。很像VC等工具中的step in。后面可以加count也可以不加,不加表 示一条条地执行,加则表示执行后面的count条指令,然后再停住。b) next/n count同样单步跟踪,如果有函数调用,他不会进入该函数。很像VC等工具中的step over。 后面可以加count也可以不加,不加表示一条条地执行,加则表示执行后面的count 条指令,然后再停住。c) finish count 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数 值等信息。d) until/u count 当你厌倦了在一个循环体内单步跟踪时,在循环指令上使用这个命令可以运行程序 直到退出循环体。e) continue/c ignore-count当程序被停住了,你可以用continue恢复程序运行,直到程序结束,或是下一个断 点到来。ignore-count表示忽略其后的断点次数。11. 查看运行时数据a) print打印变量,可以使用缩写p。i. p 基本用法,打印变量或者表达式,如p i、p i+j。ii. p/ 使用指定格式打印。支持的格式包括: x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十六进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。c 按字符格式显示变量。f 按浮点数格式显示变量。iii. p * 指定长度打印数组。 如有 int* array = new int100;则可以使用p *array10,查看数组前10个元素的数值。b) examine查看指定内存地址中的数据,可以使用缩写x,可以在gdb中使用help x查看帮助。 使用方式为:x/ 支持的格式除了 print中的格式外,还包括:n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。u表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u 参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g 表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写 指定字节,并把其当作一个值取出来。c) display用于自动显示, 当程序停住时,或是在你单步跟踪时,这些变量会自动显示。使用 方式为:display display/ display/ 支持的格式i和s,可以help display查看。12. 修改运行时数据a) 修改运行时变量set =set var =如果变量名与gdb的环境变量名冲突时,则需要加var前缀来说明这是要设置一个 变量。b) 强制函数返回returnreturn 如果函数需要返回值,则指定expressionc) 强制调用函数call 13. 调试多线程多线程调试常用的命令如下:a) info thread查看线程信息。b) thread 切换到指定ID的线程。c) break thread all对所有经过的线程都设置断点。d) set scheduler-locking off|on|step在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执 行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。off不锁定任何线程,也就是所有线程都执行,这是默认值。on只有当前被调试程序会执行。step在单步的时候,除了 next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!