Во-первых, проблема:
У меня есть несколько бесплатных проектов, и, как и любое программное обеспечение, они содержат ошибки. Некоторые коллеги-пользователи при обнаружении ошибки присылают мне отчеты об ошибках со следами стека. Чтобы упростить поиск места неисправности, я хочу видеть номера строк в этой трассировке стека. Если приложение поставляется без файлов .pdb, то вся информация о строках теряется, поэтому в настоящее время все мои проекты развернуты с файлами .pdb и, следовательно, сгенерированные трассировки стека имеют эти номера.
Но! Но я не хочу видеть эти файлы в дистрибутиве и хочу удалить все .pdb. Они сбивают с толку пользователей, занимают место в установщике и т. Д.
Решение Delphi:
Давным-давно, когда я был программистом на Delphi, я использовал следующую технику: в исключительных случаях мое приложение ходило по стеку и собирало адреса. Затем, когда я получил отчет об ошибке, я использовал инструмент, который восстанавливает правильную трассировку стека с именами функций и номерами строк на основе собранных адресов и соответствующих файлов символов, расположенных на МОЕМ компьютере.
Вопрос:
Есть ли какая-нибудь библиотека, техника или что-то еще, чтобы сделать то же самое в .NET?
Обновление статуса: Очень интересно, что частое задание вопроса - лучший способ начать собственное расследование. Например, я некоторое время думаю об этой проблеме, но начинаю искать ответ только несколько дней назад.
Вариант 1: MiniDumps. После долгих поисков я нашел способ создать мини-дамп из кода и восстановить стек из управляемого мини-дамп.
Однако для этого решения необходимо перераспределить две дополнительные сборки (размером ~ 1 МБ), и мини-дампы занимают некоторое пространство, и пользователю неудобно отправлять их по электронной почте. Поэтому для моих целей сейчас это неприемлемо.
Вариант 2: Спасибо weiqure за подсказку. Можно извлечь управляемое смещение IL для каждого кадра стека. Теперь проблема в том, как получить номера строк из .pdb на основе этого смещения. И что я нашел:
Используя этот инструмент, можно создавать XML-файлы для каждой сборки выпуска и помещать их в репозиторий. Когда на компьютере пользователя возникает исключение, можно создать отформатированное сообщение об ошибке со смещением IL. Затем пользователь отправляет это сообщение (очень маленькое) по почте. И, наконец, можно создать простой инструмент, который воссоздает полученный стек из отформатированного сообщения об ошибке.
Мне только интересно, почему никто другой не реализует такой инструмент? Я не верю, что это интересно только мне.