Linux中gdb程序调试器的命令使用(包括后台进程和多线程的调试)

xiaoxiao2021-02-28  95

一、什么是gdb?                gdb是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。        gdb中的命令固然很多,但我们只需要掌握其中最重要的十几个命令,就大致可以完成日常的基本的程序调试工作。 二、怎么进入gdb调试模式?                 不是什么可执行程序都是可以用gdb来进行调试的。要使得可执行程序能被gdb调试,必须在程序的编译过程中加入编译选项,即-g选项。这个选项将在编译的时候为目标文件加入调试信息,这样才能被gdb调试。          gcc  -g  -c  hello.c  -o  hello.o          上面命令编译出一个加入调试信息的目标文件hello.o          其中: -g:加入调试信息的选项                      -c:只编译不链接,生成目标文件,是不可执行的                      -o:为生成的目标文件命名                   注意:如果一个程序有多个源文件,则要调试这个程序,则需要在生成每个源文件的目标文件的命令中加入-g选项,最后链接成的可执行程序才是可以用gdb调试的,否则调试时就出现错误  no symbol table is loaded          一个栗子:          有一个程序有两个源文件child.c 和 main.c ,如果要生成可被调试的最终可执行程序,需要依次执行下面命令:          gcc  -g  -c  child.c  -o  child.o          //:生成加入调试信息的目标文件child.o          gcc  -g  -c  main.c  -o  main.o         //:生成加入调试信息的目标文件main.o          gcc  child.o  main.o  -o  main          //:链接child.o 和 main.o 生成最终可执行程序main         上面命令执行之后, main就是可被调试的可执行程序          gdb  ./main   回车         即可进入gdb调试模式! 三、gdb调试命令(最常用的)                       run : 程序第一次执行,到第一个断点位置暂停。如果没有断点,则一直执行程序直至完成                  run 后面可以加上参数,作为主函数main的参数                  run 可简写为 r        start : 进入逐行调试模式, 不会一次性执行完整个程序        step : 一次执行一行语句, 遇到函数调用将进入函数                     step 可简写为 s        next : 一次执行一行语句,但遇到函数调用不进入                     next 可简写为 n        returnfinish : 单步进入函数后,直接跳出函数        bt : 查看堆栈信息, 可以查看到段错误发生的行号        list : 查看当前行附近的所有代码(默认显示10行)                  list 5, 10 : 显示当前文件 5 到 10 行的内容                  list test.c : 5, 10   : 显示test.c文件的 5 到 10 行的内容                  list main  : 显示main函数周围的代码                  list test.c function : 显示test.c文件中函数function周围代码                  list 可简写为 l        break : 设置断点                        break main : 可以给一个函数设置断点                        break 12   : 可以为当前文件的某一行设置断点                        break test.c 12 : 给源文件test.c 的第12行设置断点                        break 可简写为 b        info breakPoint : 查看所有断点信息(断点位置,断点编号...)                                              可简写为 i b        delete : 删除断点                        delete 4 : 删除断点号为4的断点                        delete :  即不指定断点编号,则删除所有断点                        delete 可简写为 d        continue : 继续执行运行程序,到下一个断点暂停 或 watch 变量对象变量改变时暂停                               continue 可简写为 c        print : 查看某个变量的内容                      print a : 输出变量a的值                      print 可简写为 p        watch : 监控一个变量,当变量发生改变时,程序会停止                         watch a : 监控变量a,如果a的值发生了改变,则程序暂停 后台进程调试:        将指定进程链接进入gdb调试:               gdb -p + PID : 可以进入正在运行的后台程序的调试模式                                       pID 指的是进程的ID               attach + PID : 在gdb内部命令环境进入一个后台进程的调试模式                                       解除当前链接进gdb的进程:                                       detach 多线程调试:         info thread : 查看所有线程信息(线程编号... 其中标识*指的是当前调试的线程)        thread + 线程编号 : 可以切换调试线程        set scheduler-locking on : 锁定调试线程,即只运行当前调试线程,其他线程不运行        set scheduler-locking off : 关闭锁定, 所有线程都会运行
转载请注明原文地址: https://www.6miu.com/read-1000052.html

最新回复(0)