2015-06-22 68 views
0

在我的游戏运行了一段时间后,同样的警告出现,我的游戏中断。我不知道这是为什么,我找不到解决方案。未处理的类型异常

是不断弹出的消息如下:

微软的Visual Studio Express的2013年Windows桌面

类型的未处理的异常 'System.ComponentModel.Win32Exception' 发生在System.Drawing中。 dll的

附加信息:操作成功完成

我甲肝e一个Object类,它处理屏幕上显示的所有对象(位置,碰撞等),并且警告似乎来自这个类。当显示警告,在-特别一行被高亮显示每一次,那就是:

public Obj(Vector2 pos) 
    { 
     position = pos; 
    } 

解决我的问题的任何帮助将不胜感激

+1

您有一个例外。在调试中运行你的游戏,并打开First Chance Exceptions(工具 - >异常 - > CLR异常) –

+0

@Yuval Itzchakov这不是CLR异常Prima facie,它需要启用Win32异常并需要适当的pdb文件才能查看确切的堆栈在运行时生成,使用像adplus工具 –

+0

@YuvalItzchakov我看过我的调试>例外> CLR例外,并已有一个滴答下用户未处理,但没有一个在抛出 –

回答

0

你在你的游戏的非托管组件异常。转到Debug - > Exceptions并在Win32 Exceptions行中勾选“未处理用户”框。

这样,每当引发Win32异常时,您的调试器都会中断,并且如果您加载了所需的符号,您将能够像平常一样调试代码。

此外,您可以使用Marshal.GetLastWin32Error方法获取最后一个Win32错误代码。掌握了这些信息后,你应该能够明确地知道你的代码正在抛出什么,以及如何解决它。

+0

我已经检查了我的调试>异常和Win32用户 - 未处理已被打勾。警告似乎被抛出在'public Obj(Vector2 pos){position = pos; }'但是我不知道为什么,我对编程非常陌生,所以我不知道该怎么做 –

+0

你碰巧也检查了“抛出”吗?众所周知,Win32和特别是GDI(这可能就是你正在使用的)为所有事情抛出异常。你不应该因为这个原因被“抛出”检查,只有未处理的应该让你感兴趣。 – aevitas

+0

我没有检查“抛出”,只是用户未处理 –

0

您所提供的信息是非常有限的,我可以提供关于如何调试问题的一些指针的.Net/CLR基本管理组件在很大程度上依赖于各种服务通过Win32/Windows OS完成的工作。如果在托管组件内发生异常,您将获得托管堆栈跟踪,否则,罪魁祸首可能会超出托管层。有一套很好的Windows调试工具,可以让生活更轻松。请记住,在获取堆栈跟踪和了解罪魁祸首方法的整个过程中,您需要pdb文件,它们是符号文件,它可以将二进制文件与导致问题的确切代码进行匹配。当你在VS.Net中启用Win32时,这也不会提供太多细节,因为你只有win32二进制文件而不是实际的代码。实际上这个问题似乎与System.Drawing.dll中的未托管代码有关。

尝试以下步骤:

  1. 下载MS对于给定的OS味道公共符号,让他们在文件夹和路径添加到_NT_SYMBOL_PATH environment variable,这是使用Windows调试工具很重要。您也可以在VS.Net中添加符号路径以供调试器使用。

  2. 添加托管代码PDB文件路径的环境变量,VS反正挑选,最多从本地文件夹一样ADPlus的

  3. 配置工具来创建第二次机会异常转储,了解差异第一和之间第二次机会例外here。你需要在崩溃模式下使用adplus,查看更多信息here。这将生成一个dmp文件

  4. 您打开WinDbg的dmp文件在那里它可以帮助你了解每个线程的堆栈,从而缩小在这个问题上

  5. 请记住,一旦你设置环境变量_NT_SYMBOL_PATH,打开具有新设置的新commnad提示,并使用相同的提示符下运行adplus, windbg, VS,因为它会采取默认设置

大多在自与MS库的问题你的情况,当前进程将有助于你在缩小工作名单d,这可能是与系统相关的一些配置,因为大多数情况下这是一个已知问题。

如果你提供更多的细节,那么我可以看到我们能做些什么,以进一步调试

相关问题