Как использовать ltrace с подстановочными знаками
Я новичок в трассировке.
- Я хотел бы использовать подстановочные знаки (шаблоны) для отслеживания вызовов функций, но они, похоже, не работают должным образом, на основе веб-страниц, которые я вижу, например, http://man7.org/linux/man-pages/man1/ltrace.1.html
Например, это работает:
ltrace -c -e "XDrawLine" -p 10876 ^C
% time seconds usecs/call calls function
------ ----------- ----------- --------- --------------------
100.00 4.925592 501 9829 XDrawLine
------ ----------- ----------- --------- --------------------
100.00 4.925592 9829 total
Но это ничего не соответствует
trace -c -e "XDrawLin*" -p 10876
^C
% time seconds usecs/call calls function
------ ----------- ----------- --------- --------------------
------ ----------- ----------- --------- --------------------
100.00 0.000000 0 total
Кроме того, не повезло с -e "/XDrawLin.*/"
или же -e "XDrawLin.*"
или. Любой рабочий пример приветствуется.
- Если это будет решено, я хотел бы перейти к тому, как отследить на C++ символы lib, я буду использовать искаженный или demangled формат?
1 ответ
Решение
Функциональность -e
переключатель эволюционировал ltrace
релизы. Даже довольно недавние выпуски Linux часто поставлялись с более старой версией ltrace, и это, скорее всего, проблема для вас. (Например, RHEL6, если я правильно помню, поставляется с версией 0.5.) Выполнить ltrace --v
и убедитесь, что у вас версия 0.7 и выше.
* Версия 0.7.0 [пт 2012-11-09] ** Трассировка... *** Ограниченная поддержка отслеживания возвратов из функций хвостового вызова Селекторы *** -e, -x и -l теперь позволяют использовать глобусы и регулярные выражения
http://anonscm.debian.org/gitweb/?p=collab-maint/ltrace.git;a=blob_plain;f=NEWS;hb=0.7.3
Если у вас более старая версия ltrace - обновите ее с помощью менеджера пакетов или загрузите ее с http://freecode.com/projects/ltrace