]> Sergey Matveev's repositories - stargrave-blog.git/commit
DTrace помогает на работе
authorSergey Matveev <stargrave@stargrave.org>
Wed, 29 Jan 2025 19:27:00 +0000 (22:27 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 29 Jan 2025 19:27:00 +0000 (22:27 +0300)
commitd4f65ecfd845dea39045336c7cd6aa3c70215482
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904
parent43f494ed472e115b416d926c2692ee6048243f67
DTrace помогает на работе

https://www.brendangregg.com/blog/2011-02-11/dtrace-pid-provider-arguments.html
https://www.brendangregg.com/blog/2011-02-14/dtrace-pid-provider-return.html
Есть задача по трассировке всех вызовов функций в Си программе.
DTrace-овский "pid" провайдер добавляет пробы при входе и выходе из
функции, даже которая была static.

    pid$target::mylib*:entry {}
    pid$target::mylib*:return {}

Будет выводить факты вызовов всех функций с префиксом mylib в имени.
И аргументы функций доступны через arg0, arg1, .... Без изменения
программы можно чуть ли не полностью трасировать всё что в ней
происходит. Хотя мне и пришлось добавить свои пробы дополнительные,
которые где-то в середине функций имеются. Можно и Си-шные структуры
тоже разбирать прямо внутри DTrace.