我们使用strace很多。 我们想输出一些文字到strace来标记代码已经到达的地方。 我看到人们做到目前为止的方式是统计一个不存在的文件。 文件名就是他们想要在strace中看到的文本。 它相当快,但我相信有一个更好的办法。 我担心可能会有很多代码,并且即使挂载点是假的,也可能会发生内核locking。 有任何想法吗?
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) = ? $