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

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

*

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

在GDB中运行程序

一、启动程序

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

run(r):

  run(r)命令使程序启动,可以在run命令中指明程序参数;值得注意的是,首次运行run后,如果再次执行run并且不带参数,会以之前的参数运行程序。

set args:

  指定程序的参数。set args后,run可以不带参数而以指定的参数运行程序。如果set args不太参数,清楚程序参数,执行run后程序不太参数运行。

  在加载程序后,如果程序重新编译,gdb会根据符号文件的更改时间自动重载加载符号文件,所以,不需要重新加载文件。

start:

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

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

attach pid:

  从ps获得进程号,通过attach命令连接到该进程。attach一个进程后,gdb首先stop该进程,这样就可以设置断点,执行step、continue等命令;如果执行r命令,会杀掉原来的进程。

detach:

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

三、调试多个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

四、调试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,参见第三部分。

五、多线程调试

info threads:

  显示线程信息。

thread thread-id

  切换到对应线程。

thread name [name]:

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

六、Checkpoint

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

  通过以下命令实现快照。

  checkpoing: 生成当前状态的快照

  info checkpoint:显示快照信息

  restart checkpoint-id:恢复到某个checkpoint

  delete checkpoint checkpoint-id:删除某个checkpoint

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

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

*

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

转载于:https://www.cnblogs.com/homeX/p/5461133.html

使用gdb进行程序调试1-在GDB中运行程序相关推荐

  1. stm32f4 RAM中运行程序 读保护设置

    主要是为了在RAM中运行程序来解除读保护的.没想到ST-Link Utility 就直接可以. ST-Link Utility:target-->options bytes-->就可以看到 ...

  2. 解压bz2;kaggle(google人机验证);pycharm加上参数运行;no module named ‘torch_sparse;像这种在kaggle中运行程序报错—— invalid syn

    https://jingyan.baidu.com/article/86fae3461437c53c48121a50.html 关于kaggle一些问题解决办法 - Y-flower - 博客园 Go ...

  3. python程序执行三种方式,Python运行程序的三种方法

    对于python中运行程序的方法,是我们初学时就已经掌握过的了,想必大家会的只是其中的一两种方式. 本篇对程序运行的三种方式进行了整理,分别是:Python的解释器.交互式运行和PyCharm,大家在 ...

  4. 函数调用关系图如何画_程序是如何在 CPU 中运行的(二)

    笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 前言 在上一篇文章中<程序是如何在 CPU 中运行的(一)>笔者讲述了程序中一条一条指令以及一条一条 ...

  5. Linux 下后台运行程序,查看和关闭后台运行程序(转载)

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...

  6. java中eclipse中运行程序的快捷键是什么?

    java中eclipse中运行程序的快捷键是什么? 因帅被追杀灬  |  浏览 3393 次  我有更好的答案 2015-02-02 15:35 最佳答案 CTRL+F11,采纳哦  本回答由提问者推 ...

  7. matlab输入指令错误怎么修改,在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?...

    点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义. 怎么修改?具体信息 答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因. 1. ...

  8. VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序

    基本流程跟我的另一篇文章<VsCode + gdb + gdbserver远程调试C++程序>一样,不一样的是需要重新编译gdb和交叉编译gdbserver. 一.准备工作 sudo ap ...

  9. 命令行怎么运行go程序_Go教程32: 编译打包运行程序

    这篇文章你能学到 1. 编译Golang代码 2. 指定运行平台 3. 使用UPX压缩Golang最终程序 4. 运行程序 1. 编译Golang代码 1.0 Go编译指令格式 go build [- ...

最新文章

  1. js 打开窗口window.open
  2. 聚类效果评估、内部指标(Jaccard系数、FM指数、Rand指数)、外部指标(DB指数、Dunn指数)、轮廓系数(Silhouette Coefficient)
  3. 【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
  4. [LeetCode]ZigZag Conversion
  5. 会产生php7内存泄露,为什么 PHP unserialize 会有内存泄露
  6. GitHub/Git 使用
  7. idea 切换java11_Java 11就在这里,您准备好进行切换了吗?
  8. url override and HttpSession implements session
  9. 【剑指offer】_12 数组中的逆序对
  10. tomcat内存溢出问题解决思路
  11. 转移到ios下载安卓_安卓和IOS角色互转 和平精英跨系统角色转移服务将上线
  12. BZOJ-1177 [Apio2009]Oil
  13. ibm邮件怎么撤回_怎么申请邮箱?163邮箱如何注册使用?
  14. 宁夏大学新华学院08计算机马宁,公 示
  15. SAP License:SAP关键用户职责
  16. python安装找不到.log的文件_python – logger找不到文件
  17. 物理术语的理解(二)
  18. The Second Assignment
  19. 计算机组成原理学习 笔记三
  20. 苹果16g不够用怎么办_孩子不够自信怎么办?父母学会用这4个方法,孩子长大更优秀自信...

热门文章

  1. ASP.NET判断当前日期是第几周
  2. .Net Discovery 系列之一--string从入门到精通(上)
  3. ViTAEv2世界第一:6亿参数模型,ImageNet Real 91.2%最高准确率,更大模型、更多任务、更高效率...
  4. 重读 CenterNet,一个在Github有5.2K星标的目标检测算法
  5. ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
  6. EfficientDet目标检测谷歌官方终于开源了!
  7. 强烈推荐!商汤-港中文MMLab开源图像视频超分辨率工具箱MMSR
  8. 工作10以上老程序员都去哪了?作为新时代的程序员我们该何去何从
  9. 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!
  10. 收藏!李飞飞老师《注意力与Transformer》总结,84页ppt开放下载!