Существует реализация awk с отладчиком, похожим на gdb, с именем dgawk .
Вы говорите, что хотите время выполнения для каждой подкоманды.
Вот как я это делаю, независимо от языка:
Дайте ему достаточно рабочей нагрузки, чтобы он работал достаточно долго, и измерьте время часами (N секунд).
Затем сделайте это снова, и пока он работает, нажмите Ctrl-C.
Выполните обратную трассировку, чтобы проверить стек, и скопируйте его в текстовый редактор.
Сделайте это несколько раз, например 10.
Любая подкоманда появится в стеке на долю времени, которое она проводит.
Так что если sort
занимает 50% времени (N / 2 секунды), оно появится примерно на 5 из этих выборок.
Это говорит вам о больших, а не маленьких. Я полагаю, вы ищете большие.
(Некоторые люди говорят, что это не точно, что является глупостью. Конечно, количество времени не очень точное - оно не должно быть. Точность, которая вам нужна, находится в местоположении - точно определяя, где проблема, и это то, что он делает.)
ДОБАВЛЕНО: Вы можете почти сделать это с помощью pgawk . Если вы запускаете свою программу в режиме профилирования, каждый раз, когда вы нажимаете Ctrl-C (или что-то еще), она печатает стек вызовов в выходной файл. Единственная проблема заключается в том, что он печатает имена функций, а не строки, из которых они вызываются, что вам может понадобиться.