Отладка минидампа должна была быть значительно улучшена в VS2010. Сам еще не видел много доказательств этого, отладка в смешанном режиме выглядит так же неловко, как и раньше, когда я проводил несколько быстрых тестов. Хотя не верьте мне на слово. Однако Native-only никогда не покажет вам управляемый стек вызовов.
Займитесь этим в источнике. Напишите обработчик событий для AppDomain.CurrentDomain.UnhandledException и зарегистрируйте его в методе Main(). Пусть он отображает значение e.ExceptionObject.ToString(), скажем, в окне сообщения. Это дает вам управляемую трассировку стека исключения. Пока отображается это окно сообщения, вы также можете сделать мини-дамп, который должен приблизить вас к месту сбоя.
Однако конкретное исключение, которое вы получаете, определенно указывает на собственный код C/C++. Переполнение буфера, повреждающее стек. Убедитесь, что у вас есть файлы .pdb для любого машинного кода, который использует ваше приложение. И настройте сервер символов Microsoft, чтобы получить хорошую собственную трассировку стека из минидампа.
Изменить: тот факт, что вы не получаете UnhandledException, определенно указывает на проверку целостности стека в CRT. Он был разработан, чтобы не вызывать исключение, а немедленно завершать работу программы. Необходимое поведение, поскольку стек скомпрометирован, код не может предположить, что его можно безопасно раскрутить. Учитывая место сбоя, вполне вероятно, что эта проверка действительно выполняется в коде CLR. Я знаю, что это не было сделано в предыдущих версиях CLR, но это может быть по-другому в версии CLR, включенной в .NET 4.0.
Это затруднит получение управляемой трассировки стека. Вы можете многое перепроектировать из неуправляемой трассировки стека, если вы настроите сервер символов так, чтобы вы получали имена идентификаторов из фреймов стека CLR. Опубликуйте эту трассировку стека в своем вопросе, если вам нужна помощь в ее интерпретации. Ошибка в коде CLR не является маловероятной, кстати, вы можете подумать о том, чтобы позвонить в службу поддержки Microsoft. Однако им потребуется последовательное воспроизведение. Они могут обойтись всей этой важной трассировкой стека, если трудно найти репродукцию. Настройте сервер символов, чтобы получить хорошую трассировку неуправляемого стека. Легко в VS2010: Инструменты + Параметры, Отладка, Символы, отметьте «Серверы символов Microsoft».
person
Hans Passant
schedule
23.07.2010