使用gdb进行程序调试1-在GDB中运行程序

/******************************************************************多线程

 * 本文为博主学习《Debugging with GDB》的读书笔记,版权全部,转载请注明出处。函数

 *学习

 ******************************************************************/spa

在GDB中运行程序线程

1、启动程序调试

若是在启动gdb时没有指明程序,可使用命令file或exec-file加载程序;rest

run(r):进程

  run(r)命令使程序启动,能够在run命令中指明程序参数;值得注意的是,首次运行run后,若是再次执行run而且不带参数,会以以前的参数运行程序。rem

set args:it

  指定程序的参数。set args后,run能够不带参数而以指定的参数运行程序。若是set args不太参数,清楚程序参数,执行run后程序不太参数运行。

  在加载程序后,若是程序从新编译gdb会根据符号文件的更改时间自动重载加载符号文件,因此,不须要从新加载文件

 start:

  使用start命令使程序停在main函数的第一条语句。

 

2、调试已经在运行的程序

attach pid:

  从ps得到进程号,经过attach命令链接到该进程。attach一个进程后,gdb首先stop该进程,这样就能够设置断点,执行step、continue等命令;若是执行r命令,会杀掉原来的进程。

detach:

  释放该进程,原进程会继续执行。

 

3、调试多个inferiors和程序

  gdb容许在一个会话下调试多个程序,好比一个进程fork出两个或者多个进程,或者把当前程序复制出一个副本,这些都是经过inferior实现控制。

info inferiors:

  显示当前管理的inferiors。

inferior infono:

  切换到对应的inferior。

add-inferior [-copies n] [-exec executable]:

  添加n(默认为1)个inferior,若是指明executable文件,能够之后经过file加载符号文件。

clone-inferiror [-copies n] [infno]:

  复制编号为infno(默认为当前)的inferior。

其它相关命令:

  remove-inferiors infno

  detach inferior infno

  kill inferiors infno

  maint info program-spaces

 

4、调试fork

  默认状况下,当一个程序fork,gdb会跟踪父进程而子进程畅通无止的执行。若是在child中设置了一个断点,执行到断点处,child会收到一个SIGTRAP信号,默认为终止程序。

  最开始调试child进程的方法是在child中设置一个sleep,而后经过attach连到child。

set follow-fork-mode mode

show follow-fork-mode:

  在Linux2.5.46之后,gdb支持fork函数的调试;经过set-follow-mode命令,设置跟随parent仍是child,若是不设置默认为跟随parent。

set detach-on-fork mode

show detach-on-fork:

  在Linux,能够经过set detach-on fork off命令,在fork后,对parent和child都进行调试。父、子进程为多个inferiors,参见第三部分。

 

5、多线程调试

info threads:

  显示线程信息。

thread thread-id

  切换到对应线程。

thread name [name]:

  修改当前thread的名称。默认为程序名称。

 

6、Checkpoint

  在Linux,gdb支持保留程序在某个时候的快照,除了进程号和已经输出的内容,全部状态恢复到快照状态。

  经过如下命令实现快照。

  checkpoing: 生成当前状态的快照

  info checkpoint:显示快照信息

  restart checkpoint-id:恢复到某个checkpoint

  delete checkpoint checkpoint-id:删除某个checkpoint

 

 /******************************************************************

 * 本文为博主学习Debugging with GDB的读书笔记,版权全部,转载请注明出处。

 *

 ******************************************************************/

相关文章
相关标签/搜索