Прошло более 10 лет с тех пор, как этот вопрос был задан. К сожалению, пока вроде ничего не изменилось.
Я успешно использовал VTune Amplifier с двоичными файлами Delphi более пары раз за многие годы. Это выполнимо, но на это уходит много времени. В какой-то момент у нас была лицензия на AQTime, но она мне не очень понравилась. Замедление выполнения было слишком большим для большого проекта, и я не мог привыкнуть к тому, как были представлены результаты.
Последние версии VTune Amplifier выглядят намного чище, но работают примерно так же. Большую часть времени вы будете смотреть в правый столбец с адресами памяти стека вызовов. Что вы хотите сделать, так это сопоставить эти адреса с адресами в файле карты, который генерирует Delphi (если вы включите эту опцию). Небольшая оговорка: адреса в стеке вызовов внутри VTune Amplifier и в файле карты смещены по начальному адресу секции кода. Значение по умолчанию - 0x401000 (вы можете найти его в начале файла карты). Следовательно, вам нужно будет искать в файле карты адрес в стеке вызовов за вычетом смещения. Более того, довольно часто адрес имеет дополнительное смещение в несколько байтов. Вместо поиска точного (смещения) адреса, ищите окрестности адреса, а затем проверьте, к какой строке принадлежит точный адрес. Также иногда бывает, что некоторые адреса не указывают на нужное место. Просто проигнорируйте этот адрес и перейдите к следующему в стеке вызовов.
Преобразование файла карты (или эквивалентного двоичного файла Delphi) в файл pdb потенциально может значительно упростить задачу. Мне не удалось найти современный инструмент для выполнения этой работы, но я нашел описание формата файла pdb в InformIt (Cracking PDB Symbol Files by Sven B. Schreiber).
Промежуточное решение могло бы заключаться в ускорении текущего процесса с помощью инструмента, который считывает файл карты и позволяет быстро искать адрес (включая корректировку смещения и использование поиска по окрестностям). Еще лучше, если он позволяет вам перейти к исходному файлу и отобразить недавно сопоставленные адреса.
Конечно, лучшим решением для Embarcadero было бы добавление поддержки для генерации файлов PDB в свой компилятор, но мой опыт работы с ними показывает, что они просто копят ошибки и запросы функций и редко когда-либо что-то с ними делают. Мы сами по себе в этом вопросе.
Интересно, что Примож Габриелчич упоминает усилитель Intel VTune по крайней мере в двух книгах, связанных с Delphi. Освоение программирования на Delphi (2019) упоминает его вместе с несколькими другими программами, но это та, для которой не отображается дополнительная информация. Было бы интересно узнать, действительно ли автор использовал VTune Amplifier с двоичными файлами Delphi, и как он это делает.
person
Paul
schedule
06.03.2020