使用gdb进行程序调试1-在GDB中运行程序
/******************************************************************
* 本文为博主学习《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中运行程序相关推荐
- stm32f4 RAM中运行程序 读保护设置
主要是为了在RAM中运行程序来解除读保护的.没想到ST-Link Utility 就直接可以. ST-Link Utility:target-->options bytes-->就可以看到 ...
- 解压bz2;kaggle(google人机验证);pycharm加上参数运行;no module named ‘torch_sparse;像这种在kaggle中运行程序报错—— invalid syn
https://jingyan.baidu.com/article/86fae3461437c53c48121a50.html 关于kaggle一些问题解决办法 - Y-flower - 博客园 Go ...
- python程序执行三种方式,Python运行程序的三种方法
对于python中运行程序的方法,是我们初学时就已经掌握过的了,想必大家会的只是其中的一两种方式. 本篇对程序运行的三种方式进行了整理,分别是:Python的解释器.交互式运行和PyCharm,大家在 ...
- 函数调用关系图如何画_程序是如何在 CPU 中运行的(二)
笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 前言 在上一篇文章中<程序是如何在 CPU 中运行的(一)>笔者讲述了程序中一条一条指令以及一条一条 ...
- Linux 下后台运行程序,查看和关闭后台运行程序(转载)
1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...
- java中eclipse中运行程序的快捷键是什么?
java中eclipse中运行程序的快捷键是什么? 因帅被追杀灬 | 浏览 3393 次 我有更好的答案 2015-02-02 15:35 最佳答案 CTRL+F11,采纳哦 本回答由提问者推 ...
- matlab输入指令错误怎么修改,在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?...
点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义. 怎么修改?具体信息 答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因. 1. ...
- VsCode + gdb + gdbserver远程调试arm嵌入式linux C/C++程序
基本流程跟我的另一篇文章<VsCode + gdb + gdbserver远程调试C++程序>一样,不一样的是需要重新编译gdb和交叉编译gdbserver. 一.准备工作 sudo ap ...
- 命令行怎么运行go程序_Go教程32: 编译打包运行程序
这篇文章你能学到 1. 编译Golang代码 2. 指定运行平台 3. 使用UPX压缩Golang最终程序 4. 运行程序 1. 编译Golang代码 1.0 Go编译指令格式 go build [- ...
最新文章
- js 打开窗口window.open
- 聚类效果评估、内部指标(Jaccard系数、FM指数、Rand指数)、外部指标(DB指数、Dunn指数)、轮廓系数(Silhouette Coefficient)
- 【iOS报错】“this class is not key value coding-compliant for the key userPhoneNum”给字典设置键值对的时候报错...
- [LeetCode]ZigZag Conversion
- 会产生php7内存泄露,为什么 PHP unserialize 会有内存泄露
- GitHub/Git 使用
- idea 切换java11_Java 11就在这里,您准备好进行切换了吗?
- url override and HttpSession implements session
- 【剑指offer】_12 数组中的逆序对
- tomcat内存溢出问题解决思路
- 转移到ios下载安卓_安卓和IOS角色互转 和平精英跨系统角色转移服务将上线
- BZOJ-1177 [Apio2009]Oil
- ibm邮件怎么撤回_怎么申请邮箱?163邮箱如何注册使用?
- 宁夏大学新华学院08计算机马宁,公 示
- SAP License:SAP关键用户职责
- python安装找不到.log的文件_python – logger找不到文件
- 物理术语的理解(二)
- The Second Assignment
- 计算机组成原理学习 笔记三
- 苹果16g不够用怎么办_孩子不够自信怎么办?父母学会用这4个方法,孩子长大更优秀自信...
热门文章
- ASP.NET判断当前日期是第几周
- .Net Discovery 系列之一--string从入门到精通(上)
- ViTAEv2世界第一:6亿参数模型,ImageNet Real 91.2%最高准确率,更大模型、更多任务、更高效率...
- 重读 CenterNet,一个在Github有5.2K星标的目标检测算法
- ResNet改进版来了!可训练网络超过3000层!相同深度精度更高
- EfficientDet目标检测谷歌官方终于开源了!
- 强烈推荐!商汤-港中文MMLab开源图像视频超分辨率工具箱MMSR
- 工作10以上老程序员都去哪了?作为新时代的程序员我们该何去何从
- 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!
- 收藏!李飞飞老师《注意力与Transformer》总结,84页ppt开放下载!