加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VS 2012(VB.net)忽略了Windows 7 64位上未处理的异常

发布时间:2020-12-17 00:04:15 所属栏目:大数据 来源:网络整理
导读:Possible Duplicate: 07000 我刚安装并开始使用VS2012.之前使用的是VS2008 Express. VS2012在Win 7 64位上运行. (以前的开发环境是在XP 32位上). 到目前为止,已经有一个基础研究项目(WinForms,VB),并发现VS忽略了未处理的异常.最后一行应该导致异常: With c

Possible Duplicate:
07000

我刚安装并开始使用VS2012.之前使用的是VS2008 Express. VS2012在Win 7 64位上运行. (以前的开发环境是在XP 32位上).

到目前为止,已经有一个基础研究项目(WinForms,VB),并发现VS忽略了未处理的异常.最后一行应该导致异常:

With cmd 
 .Connection = sqlConn
 .CommandType = CommandType.StoredProcedure
 .CommandText = "NameOfStoredProcedure"
 .Parameters.Add("@TheParameterName",SqlDbType.Int,-1)
 .Parameters("@TheParameterNameWithATypo").Direction = ParameterDirection.ReturnValue

果然,立即窗口显示:

A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll

但代码只是继续运行!

在Debug / Exceptions对话框中,我为每种类型的异常都有一个“Thrown”和“User-Unhandled”复选框.所有人都勾选了“User-Unhandled”.我不想勾选“Thrown”,因为我将处理异常并且不想打破处理的异常. (现在,我没有尝试……根本没有Catch块 – 但是调试器就好像整个项目都包含在一个中一样).

我已经查看了所有选项,等等,但找不到任何魔法“打开Break on Exception”选项.这不是我的代码我正在寻求帮助 – 这就是发生这种情况我不能相信调试器能够发现我不可避免地会犯下的愚蠢错误.

发现了另一个question,有人碰到了这个问题,那里的问题似乎与Win64有关.但VS在Win64上真的无法使用吗?我不能完全相信 – 但不能有效地打破未处理的异常使其无法使用.

编辑:
谢谢你们的评论.我尝试过Neolisk的解决方案,但由于两个处理程序的签名不同,因此必须稍微更改代码:

Public Sub Main()
    AddHandler Application.ThreadException,AddressOf ThreadExceptionHandler
    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
    AddHandler AppDomain.CurrentDomain.UnhandledException,AddressOf UnhandledExceptionHandler

    Form1.Show()
End Sub

Friend Sub ThreadExceptionHandler(sender As Object,e As System.Threading.ThreadExceptionEventArgs)

End Sub

Friend Sub UnhandledExceptionhandler(sender As Object,E As System.UnhandledExceptionEventArgs)
End Sub

这工作 – 谢谢!但它要求我禁用应用程序框架(否则应用程序不能使用Sub Main作为启动). TBH我是一个.NET初学者,甚至不知道它的影响/优点/缺点是什么.我已经阅读了你们所提供的链接,并了解了正在发生的事情,但如果我能避免它,就不想参与其中……

幸运的是,在KB976038中应用此修复程序对我有用.应该在调试模式下导致异常和执行中断的代码,运行Form_Load事件,现在按预期执行此操作.这是启用了Application Framework,Form1作为启动对象,以及上面注释的代码.

EDIT2:
不,该修补程序不起作用.原始的“错误参数名称”行导致代码因异常而停止.但是具有DBNull-> Int32转换异常的后续行只会导致此错误框(并且没有调试可能性):

vshost.exe – Application Error INTERNAL ERROR: Unhandled exception in
Debugger::HandleIPCEvent. Event ID=0x246 Exception code=0x0000005,
Eip=0x70d58101. Process ID=0xbec (3052),Thread ID=0xb1c (2844).

我非常感谢你的所有评论 – 但在我看来,这是一个交易破坏者:如果开发人员不相信异常可以调试,他们如何使用VS?我不应该记得从Sub Main开始并在每次我想要开发的东西时都放入那些特殊的行:或者记住你不能在Form_Load中使用代码?我将建议我们停止使用Win7 64位作为开发操作系统.

我认为你在Form_Load中有你的代码,因为这可以解释它.如果是这种情况,请查看我的问题: Explain critical bug in Visual Studio 2010 and up,WinForms and WPF.这是一个已知问题.你需要将你的代码放在Form_Load之外,或者让你的应用程序从Sub Main开始,然后把你已经找到的3条魔术线放到C#中.以下是VB.NET的3行:
AddHandler Application.ThreadException,AddressOf YourExceptionHandler
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
AddHandler AppDomain.CurrentDomain.UnhandledException,AddressOf YourExceptionHandler

据我记忆,第一行实际上解决了这个问题,另外两行是为了解决其他神秘错误.只要为了安全起见,在程序一开始就将它们全部包含在内并不会有什么坏处. YourExceptionHandler可以是一个空方法.添加这3行后,异常捕获应该按预期开始工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读