Сбой приложения без каких-либо исключений - PullRequest
7 голосов
/ 10 января 2010

У меня есть многопоточное приложение .Net C #, оно использует Direct3D 9/10 и XAudio2. (Доступ к Direct3D осуществляется только одним потоком, то же самое для XAudio2. Direct3D не проблема, поскольку ошибка проявляется в режиме DX9 или DX10 без каких-либо изменений в его поведении.)

Иногда (в некоторых областях эта проблема возникает случайным образом), это приложение довольно неожиданно падает. Даже если приложение запускается через визуальную студию с отладчиком, оно завершается сбоем без каких-либо исключений. (Он начинается с того, что "applicationname.svchost.exe не работает и т. Д. И т. Д. Хотите отладить?"

Нет способа выяснить, в чем причина аварии? Потому что у меня закончились идеи, отладчик не дает мне никакой информации вообще. Без исключения я даже не могу сделать трассировку стека или дамп. : P (Полагаю, это проблема синхронизации (хотя я и думал, что в этой области я выполняю только последовательную работу ...), но почему бы не запустить исключение?: |)

В областях, где возникает проблема, я выгружаю перезагрузку серии классов, связанных с романом (в последовательной основной теме, поэтому я сомневаюсь, что это может быть проблемой), и запускаю новую музыку через XAudio2. (Кстати, каковы соображения о многопоточности в XAudio2? Безопасно ли звонить из нескольких потоков?)

Спасибо за помощь.

P.S. К моему приложению прикреплено программное обеспечение, которое отслеживает все вызовы и сообщает, какой последний вызов перед сбоем?

Ответы [ 2 ]

4 голосов
/ 12 января 2010

Вы должны попробовать использовать Windbg , анализ аварийного дампа должен указать вам на проблему, если ваше подозрение верно и это проблема синхронизации, причину проблемы может быть трудно определить.

2 голосов
/ 10 января 2010

Вы проверили журналы событий в панели администрирования Windows? Все ошибки любого рода всегда регистрируются в этом разделе с минимальными деталями.

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

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