GDB attach到进程

本文介绍如何利用GDB的attach命令调试已启动或死锁的进程,并演示了具体的调试流程,包括如何查看进程ID、启动GDB、进行backtrace以定位问题所在。

要调试守护进程等已经启动的进程或是调试陷于死循环的进程可以使用attach命令

格式 attach pid

C语言代码

#include <stdio.h>         
int main(void)    
{       
	int marks[10];     
	int i;   
	
	for(i=0;i<12;i++)     
	{     
	scanf("%d",&marks[i]);     
	}
	
	for(i=0;i<12;i++)     
	{     
	printf("%d",marks[i]);     
	}  
}


 

查看进程id

#ps ax

或者

#ps au

启动GDB

#gdb

用bt命令显示backtrace栈帧,可以看到程序通过怎样的调用途径陷入等待状态。

从上图可见调用了系统调用_isoc99_scanf()。

查看源代码,发现确是scanf("%d",&marks[i]);

attach之后就可以使用普通的gdb命令

进程信息可以用info proc显示

寄存器信息可以用info reg显示

 

### 使用 gdb 附加到进程或程序进行调试 #### 1. gdb attach 的基本概念 `gdb attach` 是一种将 GDB 调试器附加到正在运行的进程的方式。通过指定目标进程的 PID(进程 ID),GDB 可以接管该进程并允许用户对其进行调试[^1]。 #### 2. gdb attach 的使用方法 要使用 `gdb attach`,需要先找到目标进程的 PID。可以通过以下命令获取: ```bash ps -ef | grep process_name | grep -v grep | awk '{print $2}' ``` 上述命令的作用是列出所有进程,过滤出包含 `process_name` 的进程,并排除掉 `grep` 自身的进程,最后提取第二列数据即为进程的 PID[^4]。 找到目标进程的 PID 后,可以使用以下命令将 GDB 附加到该进程: ```bash gdb attach <pid> ``` 例如,如果目标进程的 PID 为 1234,则可以执行以下命令: ```bash gdb attach 1234 ``` #### 3. 示例:附加到一个运行中的程序 假设有一个名为 `my_program` 的程序正在运行,其 PID 为 5678。以下是具体步骤: 1. 找到目标进程的 PID: ```bash ps -ef | grep my_program | grep -v grep | awk '{print $2}' ``` 输出结果为 `5678`。 2. 使用 GDB 附加到该进程: ```bash gdb attach 5678 ``` 3. 在 GDB 中设置断点、查看变量或继续运行程序: ```bash (gdb) break main (gdb) continue (gdb) print variable_name ``` #### 4. 注意事项 - 在使用 `gdb attach` 时,确保当前用户对目标进程有调试权限。如果没有权限,可能会出现错误提示。 - 如果目标进程崩溃并生成了 core dump 文件,也可以直接加载 core 文件进行调试: ```bash gdb <your_executable> core ``` 这种方式适用于生产环境中程序崩溃后分析问题的场景[^2]。 #### 5. 常用 GDB 命令 在附加到进程后,可以使用以下常用命令进行调试: - `break <function>`:在指定函数处设置断点。 - `continue`:继续运行程序直到下一个断点。 - `step`:单步执行代码。 - `next`:逐行执行代码,不进入函数内部。 - `print <variable>`:打印变量的值。 - `info threads`:查看线程信息。 - `set <variable>=<value>`:修改变量的值[^3]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值