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

使用GDB调试时execve执行后可执行文件被替换的疑问

这是GDB的特性,不是Bug

你的代码里调用了execve("/usr/bin/env", argv, NULL),这个系统调用的核心作用就是用新程序完全替换当前进程的内存空间——包括代码段、数据段、堆栈等,但进程ID保持不变。

在GDB调试时:

  • 第一次输入r,GDB启动并调试a.out,当execve执行成功后,GDB会自动跟踪这个被替换后的进程(因为PID没变化),同时会将当前调试的目标程序更新为/usr/bin/env。
  • 当你再次输入r时,如果没有明确指定要运行的程序路径,GDB就会默认使用最后一次调试的目标程序,也就是/usr/bin/env。

如果想每次都重新运行原始的a.out,可以在r命令后明确指定程序路径:

run ./a.out

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:30:45