如何更改可执行文件的调试状态

问题描述 投票:0回答:1

这是我要询问的情况:

  • [gdb调试某些程序可执行文件
  • 程序员发现错误(很好!)
  • 程序员修复代码并重新编译(很棒!)
  • 程序员意识到他没有退出gdb,所以它一直都在运行
  • 具体来说,它正在运行编写可执行文件时,并且操作系统(Linux)允许它。

为什么会这样?

我是否应该收到一些操作系统错误消息,例如"file is being used by another application (gdb)"

gdb executable
1个回答
0
投票

我是否应该收到一些操作系统错误消息,如

取决于。

假设您的重建命令是gcc -o foo t.c

此命令可以open(2) foo进行写入,也可以成功写入临时文件foo.$uniqsuffix,然后将临时文件rename(2)写入foo,或者可以将unlink(2) foo创建并写入新的foo

仅第一个变体-尝试写入原始 foo将失败,并显示ETEXTBUSY

在我的(Ubuntu)系统上运行strace -fe file gcc -o foo t.c |& grep foo显示:

[pid 116892] stat("foo", {st_mode=S_IFREG|0750, st_size=16520, ...}) = 0
[pid 116892] lstat("foo", {st_mode=S_IFREG|0750, st_size=16520, ...}) = 0
[pid 116892] unlink("foo")              = 0
[pid 116892] openat(AT_FDCWD, "foo", O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
[pid 116892] stat("foo", {st_mode=S_IFREG|0640, st_size=16520, ...}) = 0
[pid 116892] chmod("foo", 0750)         = 0

因此,在此系统上,链接器使用unlink +创建新文件策略,因此不会出现错误。

© www.soinside.com 2019 - 2024. All rights reserved.