Приложение C # / WPF, генерирующее исключение ObjectDisposedException; почему я не могу поймать или получить трассировку стека? - PullRequest
1 голос
/ 18 октября 2011

У меня есть приложение C # WPF UI, и когда я закрываю его, я всегда получаю диалог сбоя приложения Windows («UIDemo столкнулся с проблемой и должен быть закрыт.»).

Отчет об ошибкеуказывает, что это исключение System.ObjectDisposedException, указывающее, что где-то вызывается метод для удаленного объекта.Хорошо, я понимаю эту часть.

И я бы с удовольствием это исправил. Я просто не могу получить трассировку стека на ублюдке.

Это исключение уклоняется от всего следующего:

  • мой обработчик DispatcherUnhandledException
  • мой try / catch, охватывающий все содержимое обработчика события Exit
  • нажатие «Отладка» в этом диалоговом окне сбоя приложения Windows закрывает его и ничего не делает
  • при запуске приложения в VisualStudioРежим отладки выглядит так, как будто он будет работать, но, как ни странно, он не дает сбоя таким образом, поэтому никаких следов

Все, что мне нужно, - это загадочное содержание сообщения об ошибке, которое Windowsотправить в MS.Эти шестнадцатеричные дампы памяти не очень полезны.

Кто-нибудь знает, как я могу получить этот проклятый след?

Ответы [ 3 ]

5 голосов
/ 19 октября 2011

В окне консоли будут показаны все исключения, созданные с полной трассировкой стека. Чтобы добавить консольное окно в приложение WPF:

  1. Перейдите в свойства проекта вашего приложения WPF.
  2. Выберите первую (боковую) вкладку, Application.
  3. Под Output type выберите Console Application.
  4. Создайте и запустите ваше приложение. Он должен запускаться с дополнительным окном консоли. Когда он падает, вы должны увидеть исключение и трассировку стека в нем.
2 голосов
/ 19 октября 2011

Другим вариантом будет DebugDiag, чтобы перехватить это конкретное исключение и создать аварийный дамп, который можно проанализировать в WinDbg через psscor2 или SOS.Это позволит вам оценить трассировку стека.

DebugDiag: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24370

Отладка CLR с WinDbg: http://www.codeproject.com/KB/debug/windbg_part1.aspx

1 голос
/ 18 октября 2011

Попробуйте поместить try / catch внутри вашего основного метода, а не вокруг обработчика выхода.В WPF основной метод не всегда легко найти - см. Здесь, чтобы найти его: http://joyfulwpf.blogspot.com/2009/05/where-is-main-method-in-my-wpf.html

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