Мы используем strace много. Мы хотим вывести некоторый текст в strace, чтобы отметить места, которые достиг код. То, как я вижу, что люди сделали это до сих пор, - это ставить несуществующий файл. Имя файла - это просто текст, который они хотят видеть в strace. Это довольно быстро, но я уверен, что есть лучший способ. Я беспокоюсь, что может быть много кода, и, возможно, блокировки ядра будут удалены, хотя точка монтирования является фиктивной. Есть идеи?Печать пользовательского текста в strace. Strace comments
3
A
ответ
6
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) = ?
$
Смежные вопросы
- 1. команда Strace в Unix
- 2. Захват vDSO в strace
- 3. set_thread_area in strace
- 4. strace fixes hung process
- 5. Syscalls in strace
- 6. Как использовать strace?
- 7. Команда unix strace
- 8. 'strace' in android
- 9. Strace Multithreaded Программа
- 10. Как интерпретировать выходные Strace
- 11. Уточнение выхода STRACE
- 12. Использование strace с mpiexec
- 13. strace java applet
- 14. Интерпретация вывода strace
- 15. strace застрял при паузе syscall
- 16. Предотвратить strace из аббревиатурных аргументов?
- 17. Как использовать strace на Android?
- 18. Длительный процесс отладки. Strace, brk
- 19. Запрос на PID командует Strace
- 20. Как исключить некоторые звонки в strace?
- 21. Strace не работает в мишенях MIPS
- 22. Проблема с командной оболочкой strace в Android
- 23. Как отладить конкуренцию futex, показанную в strace?
- 24. Как захватить вывод strace в C++-программе
- 25. Добавление настраиваемых типов struct в strace
- 26. Strace -f Strace/бен/лс не удалось с PTRACE_TRACEME EPERM (операция не допускается)
- 27. strace для мониторинга активности приложения доксеризованного приложения
- 28. Использование исправлений strace, связанных с памятью памяти
- 29. Почему strace следует за другим потоком выполнения?
- 30. Как декодировать эту информацию из выхода strace
Спасибо! Я сделаю небольшой перфекционный тест, чтобы проверить, но то, что вы сказали, имеет большой смысл. Еще раз спасибо. – johnnycrash
Да, или напишите STRACE_TRACE как обычную, нормальную функцию C вместо неприятного макроса препроцессора. Используйте, если хотите, аргументы стиля printf(). – MarkR