首页 > 编程知识 正文

gdb调试详解,详细描述gdb调试程序的全过程

时间:2023-05-05 07:51:05 阅读:197469 作者:1926

之前已经写过一篇博客《Linux下使用gdb调试C/C++程序》,是一些简单的用法,今天的这一篇可以算是进阶篇。

一、关于多线程的使用命令

       1、thread

        查看当前线程的ID,这ID是GDB对线程的编号,从1开始的。以下所说的线程ID,都是这种ID。

        2、info thread 

        查看当前可以被调试的线程,ID前面有*号的表示GDB当前所在的线程。

        3、info threads

         查看所有的线程

        4、thread  thread_number

        GDB切换到线程ID为number的线程

       5、thread  apply  thread_number  command

        针对某一个线程执行GDB命令,例如  thread  apply  5  c ,只针对线程ID为5的线程执行continue命令,在多线程调试中,由于一个断点,

        会在多个线程中停住,但是有时候,只想观察某一个线程,就得采用这样的做法。

        扩展:thread  apply  all  bt ,查看所有线程的调用栈。all 表示所有线程。

       5、set  scheduler-locking   on/off

       可理解为GDB的线程调度锁,与4中的功能类似,当为on时,表示打开锁,GDB只在当前线程执行,不会切换到其他线程。

       为off,则关闭锁。

 

二、关于GDB启动的使用命令

        1、gdb  -p   process_id

         调试一个正在运行的进程,有时候要调试一个fork出来的子进程,它正在运行,必须这样的做才行。

          process_id是进程ID,通过ps -aux或者pidof相关命令得到。

         扩展:直接启动GDB,执行 attach  process_id 也可以有一样的效果。

        2、gdb  --args  ./test.exe   100

        有时候程序启动需要传入参数,因此gdb 后面必须跟--args选项。因此这个命令表示用GDB启动test.exe程序,该程序传入参数100。

         扩展:另一种做法:1、gdb  ./test.exe      2. set  args  100   3、run

 

三、其他命令

        1、set  var  number=3

         number是一个整型变量,设定它的值为3,即修改变量的值。

       2、b   15   if  number==5

         设置条件断点,如果number等于5,将在15行停住。当然行号也可以函数名。

       3、set  print  element  0

        在用p命令打印string类型时,若字符串比较长,比如大概超过400字节,就只打印出一部分,这个命令,可以突破此限制。

         

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。