Что может вызвать сбой приложения WPF с именем события проблемы AppHangB1? - PullRequest
3 голосов
/ 01 апреля 2009

Программа, над которой я сейчас работаю, иногда зависает с проблемным событием AppHangB1. Я проследил это до определенной серии действий, но это, похоже, тип гейзенбаг, так как всякий раз, когда я прохожу код, он не проявляется И как только программа зависает, я не могу приостановить программу, чтобы увидеть, где она зависла в Visual Studio. В этом приложении происходит много вещей (неуправляемое взаимодействие, многопоточность и т. Д.), Поэтому в моем конкретном приложении может быть любое количество ошибок.

Я не ищу никого, кто решит мою проблему для меня, мне просто интересно, какие типы вещей могут вызвать зависание такого типа? Я нашел пару просмотров в Google, но ничего не помогло. Любые приемы отладки для приложений .NET, которые могут помочь точно определить проблему, также помогут.

1 Ответ

7 голосов
/ 01 апреля 2009

Событие AppHangB1 инициируется, когда поток пользовательского интерфейса не отвечает на сообщения в течение нескольких секунд, и пользователь пытается завершить его. Зависания могут быть вызваны практически чем-либо: занятыми циклами в вашем коде, выполнением сетевого или дискового ввода-вывода в потоке пользовательского интерфейса, потоком пользовательского интерфейса блокируется блокировка, удерживаемая фоновым потоком, выполняющим долгосрочную задачу и т. Д. *

Немного о том, что Visual Studio не может сломаться в точке зависания. Вы подключаетесь к отладке только для управления или к отладке в смешанном режиме? Вы можете попробовать использовать Windbg (http://www.microsoft.com/whdc/devtools/debugging/default.mspx) для неинвазивного присоединения к процессу и попытаться получить трассировку стека зависшего потока (вы хотите посмотреть, используя! Clrstack для получения трассировки управляемого стека). Кривая для Windbg довольно крутая, поэтому вы можете просто собрать дамп, который можно отлаживать в Visual Studio.

...