博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gdb用法(三) 调试其他正在运行的进程
阅读量:4221 次
发布时间:2019-05-26

本文共 1017 字,大约阅读时间需要 3 分钟。

有时会遇到一种很特殊的调试需求,对当前正在运行的其它进程进行调试。这种情况有可能发生在那些无法直接在调试器中运行的进程身上,例如有的进程只能在系统启动时运行。另外如果需要对进程产生的子进程进行调试的话,也只能采用这种方式。GDB可以对正在执行的程序进行调度,它允许开发人员中断程序并查看其状态,之后还能让这个程序正常地继续执行。

 

GDB提供了两种方式来调试正在运行的进程:

一种是在GDB命令行上指定进程的PID,另一种是在GDB中使用“attach”命令。

例如,开发人员可以先启动debugme程序,让其开始等待用户的输入。示例如下:

#./debugme            Enter a string to count words:

接下去在另一个虚拟控制台中用下面的命令查出该进程对应的进程号:

# ps -ax | grep debugme            555 pts/1 S 0:00 ./debugme

得到进程的PID后,就可以使用GDB对其进行调试了:

# gdb debugme 555            GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)            Attaching to program: /home/xiaowp/debugme, process 555            Reading symbols from /lib/libc.so.6...done.            ……

在上面的输出信息中,以Attaching to program开始的行表明GDB已经成功地附加在PID为555的进程上了

另外一种连接到其它进程的方法是先用file命令加载调试时所需的符号表,然后再通过“attaché”命令进行连接:

(gdb) file /home/xiaowp/debugme            Reading symbols from /home/xiaowp/debugme...done.            (gdb) attach 555            ……

如果想知道程序现在运行到了哪里,同样可以使用“backtrace”命令。

当然也可以使用“step”命令对程序进行单步调试。

在完成调试之后,不要忘记用detach命令断开连接,让被调试的进程可以继续正常运行:

转载地址:http://ojlmi.baihongyu.com/

你可能感兴趣的文章
DFS——选数问题
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
Web前端学习笔记——JavaScript之事件详解
查看>>
Web前端学习笔记——JavaScript之事件、创建元素、节点操作
查看>>
Web前端学习笔记——JavaScript之正则表达式、伪数组、垃圾回收
查看>>
Web前端学习笔记——JavaScript 之继承、函数进阶
查看>>
Web前端学习笔记——JavaScript之面向对象游戏案例:贪吃蛇
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>
Comma2k19数据集使用
查看>>
面向自动驾驶车辆验证的抽象仿真场景生成
查看>>
一种应用于GPS反欺骗的基于MLE的RAIM改进方法
查看>>
自动驾驶汽车CAN总线数字孪生建模(二)
查看>>
自动驾驶汽车GPS系统数字孪生建模(一)
查看>>