From d4f65ecfd845dea39045336c7cd6aa3c70215482 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 29 Jan 2025 22:27:00 +0300 Subject: [PATCH] =?utf8?q?DTrace=20=D0=BF=D0=BE=D0=BC=D0=BE=D0=B3=D0=B0?= =?utf8?q?=D0=B5=D1=82=20=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?utf8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. -- 2.50.0