Я искал в Интернете что-то, что могло бы помочь мне в профилировании сборочной линии. Я искал и нашел что-то на http://www.webservertalk.com/message897404.html
Есть две части этой проблемы; найти все инструкции определенного типа (inc, add, shl и т. д.), чтобы определить группировки, а затем выяснить, какие из них выполняются, и правильно ли суммировать Первый бит хитрый, если группировка по дизассемблеру не достаточна. Чтобы выяснить, какие инструкции выполняются, Dtrace, конечно, здесь ваш друг (по крайней мере, в пользовательской среде).
Самый хороший способ сделать это - использовать инструмент только в начале каждого базового блока; найти их было бы ручным процессом прямо сейчас ... однако, инструментарий каждой инструкции выполним для небольших приложений. Вот пример:
Во-первых, наша довольно тривиальная тестируемая программа на C:
main()
{
int i;
for (i = 0; i < 100; i++)
getpid();
}
Теперь наш слегка хитрый D-скрипт:
#pragma D option quiet
pid$target:a.out::entry
/address[probefunc] == 0/
{
address[probefunc]=uregs[R_PC];
}
pid$target:a.out::
/address[probefunc] != 0/
{
@a[probefunc,(uregs[R_PC]-address[probefunc]), uregs[R_PC]]=count();
}
END
{
printa("%s+%#x:\t%d\t%@d\n", @a);
}
main+0x1: 1
main+0x3: 1
main+0x6: 1
main+0x9: 1
main+0xe: 1
main+0x11: 1
main+0x14: 1
main+0x17: 1
main+0x1a: 1
main+0x1c: 1
main+0x23: 101
main+0x27: 101
main+0x29: 100
main+0x2e: 100
main+0x31: 100
main+0x33: 100
main+0x35: 1
main+0x36: 1
main+0x37: 1
Из приведенного примера это именно то, что мне нужно. Однако я понятия не имею, что он делает, как сохранить программу DTrace, как выполнить код, для которого я хочу получить результаты. Так что я открыл это, надеясь, что некоторые люди с хорошим опытом DTrace помогут мне понять код, сохранить его, запустить его и, надеюсь, получить показанные результаты.