Frage

Wir verwenden viel strace. Wir möchten einen Text in Strace zur Ausgabe an Markierung Stellen Sie den Code erreicht hat. Die Art, wie ich sehe, wie Menschen es bisher getan haben, ist eine nicht vorhandene Datei stat. Der Dateiname ist nur der Text, den sie in der Strace sehen wollen. Es ist ziemlich schnell, aber ich bin sicher, dass es ein besserer Weg gibt. Ich mache mir Sorgen, dass es vielleicht eine Menge Code und vielleicht Kernel Sperren sogar getroffen, obwohl der Mount-Punkt Schein ist. Irgendwelche Ideen?

War es hilfreich?

Lösung

write() zu einem Out-of-Bereich zeigt Dateideskriptors sich gut in strace Ausgang und sollte viel schneller sein - die Bereichsprüfung geschieht früh, und es braucht nicht zu Blick auf die Daten überhaupt. (Sie müssen die Länge der Daten zu übergeben geschrieben werden, und nicht nur eine 0-terminierte Zeichenkette, aber gcc wird in der Regel optimize strlen() einer konstanten Zeichenfolge auf eine Konstante.)

$ 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)                           = ?
$ 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top