使用gdb attach调试程序遇文件不存在错误及执行停滞问题求助
GDB Attach调试问题的解决思路
1. 处理attach: No such file or directory.错误
- 验证进程有效性:执行
ps -ef | grep 23224,确认进程ID是否存在,若无结果说明进程已退出或ID输入错误 - 检查权限:如果目标进程由其他用户启动,需使用
sudo gdb执行attach操作,普通用户无权限附加到其他用户的进程 - 匹配架构:通过
file /proc/23224/exe查看进程架构,确保和你的x86_64系统匹配;若进程为32位,需安装对应32位GDB组件(如gdb.i686)
2. 解决系统库“(no debugging symbols found)”问题
- 安装调试符号包:RHEL/CentOS环境下,系统库的调试包以
-debuginfo为后缀,比如安装glibc-debuginfo和glibc-debuginfo-common-x86_64来获取libc的调试符号 - 配置自动加载:在GDB中执行
set auto-load safe-path /,允许加载系统路径下的调试符号文件 - 手动加载符号:若自动加载失效,可通过
symbol-file /usr/lib/debug/lib64/libc.so.6(路径根据实际安装位置调整)指定符号文件路径
3. 解决添加断点后run停留在创建新线程的状态
- 纠正操作逻辑:attach到已有进程后,无需执行
run(run用于启动新进程),设置断点后直接执行continue让进程继续运行即可 - 终止误启动进程:如果已经执行了
run,先执行kill终止当前启动的进程,重新attach到23224后再设置断点并执行continue - 检查断点位置:确认断点设置在目标业务代码的有效位置(如
break main或具体业务函数),避免设置在线程创建的底层系统函数上导致异常停顿
内容的提问来源于stack exchange,提问作者zhanlinmao
相关产品推荐
相关产品推荐

