Как узнать, что изначально вызвало исключение, если оно было выброшено из кода Microsoft?
-
22-08-2019 - |
Вопрос
У меня есть два элемента управления, содержащие DataGridView
на разных панелях в DockPanel
.Если кто-то находится в режиме редактирования, и я переключаю панель, я получаю NullReferenceException
выброшенный изнутри DataGridView
's EndEdit()
метод.Трассировка стека не идет глубже, и исключение не содержит дополнительной информации.
Я посмотрел на этот метод в рефлекторе и не увидел ничего явно нулевого.Я подозреваю, что проблема на самом деле в моем коде, но исключение повторно генерируется из кода Microsoft, что приводит к сбросу трассировки стека.Как узнать, что изначально вызвало исключение?
Решение
Если вы подозреваете ошибку в коде MS, вы можете загрузить символы отладки с сервера символов, загрузить их и отследить их при отладке? Вот так.
Обратите внимание, что на символы распространяется действие одной из различных лицензий.Это может повлиять на вас, если (например) вы работаете над «моно»-материалами и т. д.
Другие советы
Вы изучили свойство InnerException?
Следуйте инструкциям по настройке MS сервер символов и исходный сервер1.Настройте отладчик на прерывание при возникновении исключения NullReferenceException.Тогда вы либо получите полный исходный код для отладки, либо хотя бы полную трассировку стека.
1 Обратите внимание, что перечисленные QFE включены в SP1.