You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无调试符号应用在gdb中调用系统命令及运行进程IO重定向问题

解决方案

一、修复GDB调用系统函数失败的问题

报错核心原因首先是进程attach失败,日志明确提示ptrace: No such process,说明指定的PID 6836对应的cat进程已经退出,和cat本身没有调试信息无关:close、open这类系统函数属于glibc的导出符号,不需要目标程序自带调试信息即可调用。
正确操作步骤如下:

  • 先查询目标进程的有效PID,执行命令:
    ps aux | grep cat
    
  • 临时关闭系统ptrace安全限制(多数发行版默认开启,会阻止gdb附加到其他进程):
    sudo sysctl -w kernel.yama.ptrace_scope=0
    
  • 用正确的PID执行attach操作:
    sudo gdb -p [你查询到的有效PID]
    
  • 进入gdb交互界面后执行以下命令加载动态库符号:
    set auto-solib-add on
    sharedlibrary
    
    之后就可以正常调用close、open、dup2这类函数完成重定向操作。

二、无需GDB/额外工具的重定向方案

所有Linux发行版默认都搭载proc文件系统,不需要安装任何额外工具即可实现运行中进程输出的收集:

  • 如果只是需要采集进程后续的标准输出/错误内容,不需要修改进程本身的文件描述符指向,直接读取对应proc下的文件描述符即可:
    # 替换[PID]为目标进程ID,执行后会将进程后续所有stdout输出写入/tmp/output.log
    cat /proc/[PID]/fd/1 > /tmp/output.log &
    # 如果要收集stderr,换成/proc/[PID]/fd/2即可
    
  • 如果系统预装了基础工具包中的reptyr,还可以直接执行reptyr -L [PID]快速修改进程输出指向,不需要操作gdb。

内容的提问来源于stack exchange,提问作者themean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:02