Как AQTime это делает? - PullRequest
       39

Как AQTime это делает?

12 голосов
/ 27 ноября 2008

Я тестировал профилировщик производительности и памяти AQTime , чтобы посмотреть, стоит ли тратить эти большие $$$ на это для моего приложения Delphi.

Что меня удивляет, так это то, как он может дать вам трассировку производительности на уровне строки исходного текста (которая включает в себя количество выполнений каждой строки и количество времени, которое занимала эта строка) без изменения исходного кода приложения и без добавления чрезмерного количества время выполнения отладки.

То, как они делают это так эффективно, заставляет меня думать, что здесь могут использоваться некоторые методы / технологии, о которых я не знаю, о которых было бы полезно узнать.

Знаете ли вы, какие методы они используют для построчного захвата выполнения без изменения кода?

Существуют ли другие инструменты профилирования, которые также выполняют неинвазивную построчную проверку и, если да, используют ли они те же методы?

Ответы [ 4 ]

9 голосов
/ 23 марта 2009

Я создал профилировщик с открытым исходным кодом для Delphi, который делает то же самое: http://code.google.com/p/asmprofiler/

Это не идеально, но это бесплатно :-). Также используется техника Detour. Он хранит каждый звонок (вы должны вручную установить, какие функции вы хотите профилировать), поэтому он может создать точное дерево истории вызовов, включая график времени (!).

7 голосов
/ 27 ноября 2008

Это всего лишь предположение, но, возможно, AQtime основан на технологии, аналогичной Microsoft Detours ?

Detours - библиотека для инструментовки произвольные функции Win32 на x86, x64, и машины IA64. Обходы перехватывает Win32 функционирует, переписав код в памяти для целевых функций.

2 голосов
/ 27 ноября 2008

У давно не существовавшей TurboPower также был отличный инструмент для профилирования / анализа для Delphi под названием Sleuth QA Suite. Я обнаружил, что это намного проще, чем AQTime, но гораздо проще получить значимый результат. Может быть стоит попытаться выследить - может, eBay?

2 голосов
/ 27 ноября 2008

Я не знаю, в частности, о Delphi, но отладчик приложения C может относительно легко выполнять построчное профилирование - он может загружать код и связывать каждый путь кода с блоком кода. Затем он может нарушить все инструкции условного перехода и просто посмотреть и посмотреть, какой путь к коду взят. Отладчики, такие как gdb, могут работать относительно эффективно, потому что они работают через ядро ​​и не модифицируют код, они просто получают информацию при выполнении каждой строки. Если что-то вызывает преждевременный выход из блока (longjmp), отладчик может перехватить это и выяснить, как далеко он попал в блоки, когда это произошло, и увеличить только эти строки.

Конечно, все равно было бы сложно кодировать, но когда я говорю легко, я имею в виду, что вы можете сделать это, не тратя время на каждую инструкцию по обновлению счетчика.

...