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

跨TTY会话无需gdbserver,能否attach另一终端的GDB进程?

同一机器不同TTY下无需gdbserver调试目标程序的方法

首先明确:不需要gdbserver,但你之前的操作犯了一个关键错误——你attach的是tty1中gdb进程的PID,而不是被gdb调试的目标程序PID。

正确操作步骤

  • 在tty1的gdb中,找到被调试程序的PID:执行info inferiors,输出里会显示目标进程的PID(比如`Num Description Executable
  • 1 process 1234 ./program,这里1234就是目标PID)。也可以在tty2用ps aux | grep program`筛选,注意区分gdb进程和目标程序进程。
  • 在tty2中运行gdb attach <目标程序PID>,即可直接连接到目标程序。

解决ptrace: Operation not permitted错误

出现这个错误是因为多数现代Linux发行版(如Ubuntu)默认开启了ptrace安全限制,禁止非root用户调试非自身启动的进程:

  • 临时解除限制(重启后失效):
    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    
  • 永久解除限制:
    编辑/etc/sysctl.d/10-ptrace.conf文件,将kernel.yama.ptrace_scope = 1修改为kernel.yama.ptrace_scope = 0,然后执行sudo sysctl -p /etc/sysctl.d/10-ptrace.conf使设置生效。

多终端调试的注意事项

  • 当tty2的gdb成功attach目标程序后,tty1中的gdb会自动暂停,无法继续调试,直到tty2的gdb执行detach命令释放目标进程。
  • 如果需要两个终端同时对目标程序进行调试操作,这种直接attach的方式无法满足,此时才需要用到gdbserver:在tty1运行gdbserver 127.0.0.1:8000 ./program,tty2运行gdb ./program后执行target remote 127.0.0.1:8000,通过gdbserver作为代理实现协作调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:20:04