我有一个多线程.Net C#应用程序,它使用Direct3D 9/10和XAudio2。 (Direct3D仅由一个线程访问,对于XAudio2也是如此.Direct3D不是问题,因为DX9或DX10模式中的错误显示,而其行为没有任何变化。)
有时候(有些区域会随机出现这个问题)这个应用程序会以一种相当不引人注目的方式崩溃。即使应用程序是通过带有调试器的visual studio启动的,它也会崩溃而不会出现任何异常。 (首先说“applicationname.svchost.exe崩溃等等。等等。你想调试吗?”,如果我按下它会告诉我“你无法调试已经关闭的应用程序。”
没有办法找出崩溃的原因是什么?因为我的想法已经用完了,调试器根本没有给我任何信息。没有例外,我甚至无法进行堆栈跟踪或转储。 :P(我假设是一个同步问题(甚至认为在那个领域我只做顺序工作......),但是为什么不启动异常?:|)
在出现问题的区域我正在卸载重新加载一系列与小说相关的类(在顺序核心线程中,所以我怀疑它可能是一个问题)并通过XAudio2开始新音乐。 (顺便说一句,关于XAudio2的多线程考虑是什么?从多线程调用是否安全?)
感谢您的帮助。
P.S。有一个软件附加到我的监控所有呼叫,并告诉我崩溃前的最后一次呼叫是什么?
答案 0 :(得分:4)
您应该尝试使用Windbg,分析崩溃转储应该指出问题,如果您的怀疑是正确的并且这是同步问题,则可能很难发现问题的原因。
答案 1 :(得分:2)
您是否在Windows管理面板中检查了事件日志? 本节中始终记录任何类型的所有错误,并提供最少的详细信息。
有一次我有一个没有异常崩溃的应用程序,我发现的唯一帮助是事件日志查看器,我发现崩溃的来源是StackOverflowException。