如何调试这个C#崩溃?

5
我的C#应用程序在这个窗口中崩溃了。它是一个使用SharpDX的DirectX应用程序。
我甚至不知道从哪里开始调试?有什么提示吗?
当我启用本机代码调试时,崩溃看起来像这样:
堆栈如下:
ntdll.dll!77d1f8b1()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] 
ntdll.dll!77d1f8b1()    
KernelBase.dll!7658149d()   
kernel32.dll!75c51194()     
kernel32.dll!75c51194()     
ntdll.dll!77d5b459()    
ntdll.dll!77d5b42b()    
ntdll.dll!77d5b3ce()    
ntdll.dll!77d10133()    
XAudio2_7.dll!61fb6b43()    
XAudio2_7.dll!61fa7fa2()    
XAudio2_7.dll!61fa79e9()    
XAudio2_7.dll!61fa8bb8()    
XAudio2_7.dll!61fa9492()    
[External Code] 
SharpDX.XAudio2.dll!SharpDX.XAudio2.Voice.DestroyVoice() Line 916 + 0x34 bytes  C#

2
0xc0000005 表示在指定地址(0x5fea4c9)发生了访问冲突。该地址不是空指针(0x00000000),因此是本地代码试图访问不属于它的一块内存,已经被删除或无法访问。您是否检查了列出的“最常见来源”? - nvoigt
你在使用指针吗? - Sriram Sakthivel
@SriramSakthivel 不是直接使用指针,而是我使用的那个DirectX库使用了指针。 - clamp
1
查看崩溃时的调用堆栈,找到你能识别的最后一个方法并将断点放在其内部。当程序运行到断点处时,逐步执行以尝试确定有问题的代码行,并检查传入的参数。 - Adam Knights
@clamp 是的,PInvoke,COM 调用,任何调用本地代码的东西。我不了解 SharpDX,但如果它使用 DirectX,那么它必须做到这一点。 - nvoigt
显示剩余6条评论
1个回答

1
您正在使用错误版本的SharpDX.XAudio2.dll。这意味着您的应用程序,例如,是x86,并且尝试使用x64版本。您必须加载正确的dll版本。

当你使用错误版本的.dll时,这是一个常见的错误。 - Stathis Andronikos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接