Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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