这是我要询问的情况:
gdb
调试某些程序可执行文件为什么会这样?
我是否应该收到一些操作系统错误消息,例如"file is being used by another application (gdb)"
我是否应该收到一些操作系统错误消息,如
取决于。
假设您的重建命令是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
+创建新文件策略,因此不会出现错误。