gpt4 book ai didi

c - 将自定义文本打印到 strace 中。评论

转载 作者:可可西里 更新时间:2023-11-01 11:50:46 27 4
gpt4 key购买 nike

我们经常使用 strace。我们想将一些文本输出到 strace 中以标记代码到达的位置。到目前为止,我看到人们这样做的方式是统计一个不存在的文件。文件名只是他们想在 strace 中看到的文本。它非常快,但我相信有更好的方法。我担心可能有很多代码,并且即使挂载点是假的,内核锁也可能被命中。有什么想法吗?

最佳答案

write() 到一个超出范围的文件描述符在 strace 输出中显示得很好,而且应该更快 - 范围检查发生得早,它根本不需要看数据。 (您需要传递要写入的数据的长度,而不仅仅是一个以 0 结尾的字符串,但 gcc 通常会将常量字符串的 strlen() 优化为常量。)

$ cat hw.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#define STRACE_TRACE(str) write(-1, str, strlen(str))

int main(void)
{
STRACE_TRACE("before");
printf("Hello world\n");
STRACE_TRACE("after");
return 0;
}
$ gcc -Wall -o hw hw.c
$ strace ./hw
...
write(-1, "before"..., 6) = -1 EBADF (Bad file descriptor)
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 150), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77da000
write(1, "Hello world\n"..., 12Hello world
) = 12
write(-1, "after"..., 5) = -1 EBADF (Bad file descriptor)
exit_group(0) = ?
$

关于c - 将自定义文本打印到 strace 中。评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com