Как использовать отчет IIS Debug Diagnostics для поиска строки исходного файла в компоненте Delphi COM - PullRequest
0 голосов
/ 03 июня 2009

У нас есть компонент Delphi COM, вызываемый из веб-приложения ISAPI. Компонент COM вешает приложение, потому что оно пытается отобразить MessageBox (). В нашем пользовательском коде нет вызова MessageBox (), поэтому он должен находиться в исходном коде среды выполнения Delphi, возможно, в коде обработчика исключений.

У нас есть отчет диагностики отладки IIS, в котором в качестве кода-нарушителя указано имя нашего модуля + адрес смещения.

У нас есть файл .MAP для нашего модуля, и мы также создали файл .dbg, используя MAP2DBG.

Наш вопрос заключается в том, как определить местонахождение строки исходного файла кода, используя отчет об отладке diag IIS, содержащий адрес смещения, используя файл .MAP или .DBG?

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

1 Ответ

3 голосов
/ 03 июня 2009

Во-первых, вам нужно найти базовый адрес, по которому процесс загрузил модуль COM в процесс IIS - это может быть видно по журналу отладки IIS. Давайте назовем это BASE.

Затем вы вычисляете MAPoffset = offset - BASE - $ 1000, и у вас есть адрес, который можно найти в файле Delphi MAP.

В файле MAP (который должен быть детализирован, чтобы получить отображение номера строки) вы найдете раздел для каждого исходного модуля, в котором перечислены записи «сегмент белья: смещение». Затем вы проверяете, равняется ли смещение MAP смещению или между двумя смещениями номера строки. Это должно дать вам направление, по которой линия является оскорбительной.

Сегмент обычно равен 1 - указывает на текстовый сегмент с сгенерированным кодом - (в верхней части файла MAP есть карта сегментов).

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...