.net Form.Load和Form.New上VS2012调试行为的变通方法
我在这方面取得了一些进展,这要感谢对我以前的问题的回答。事实证明,这是已经涵盖的内容的重复表现。TLDR版本:Win64中的调试与Form_加载事件的行为“异常” 我现在要做的是找到处理这个问题的最佳方法,让VS正常工作,这样我就可以真正开始编程/调试了。在不同的地方有如此多的设置,以至于很难跟踪所有设置。我对以下各项组合进行了一整套测试: a.构建平台:任何CPU或x64 b.首选32位(选择x64时不适用) c.仅我的代码(启用/禁用) d.中断所有抛出的异常(不仅仅是用户未处理的异常) e.在Form.Load或Form.New中引发异常 保持不变:启用应用程序框架;启动对象为Form1,因此从该非用户代码调用:.net Form.Load和Form.New上VS2012调试行为的变通方法,.net,vb.net,exception,visual-studio-2012,vba,.net,Vb.net,Exception,Visual Studio 2012,Vba,我在这方面取得了一些进展,这要感谢对我以前的问题的回答。事实证明,这是已经涵盖的内容的重复表现。TLDR版本:Win64中的调试与Form_加载事件的行为“异常” 我现在要做的是找到处理这个问题的最佳方法,让VS正常工作,这样我就可以真正开始编程/调试了。在不同的地方有如此多的设置,以至于很难跟踪所有设置。我对以下各项组合进行了一整套测试: a.构建平台:任何CPU或x64 b.首选32位(选择x64时不适用) c.仅我的代码(启用/禁用) d.中断所有抛出的异常(不仅仅是用户未处理的异常) e
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.TheNameOfMyApplication.Form1
End Sub
不能在这里发布完整的结果,因为它太长了,我也找不到在这些帖子中制作表格的方法。但结论是,我从VS调试器中看到了4种不同的行为。按照从好到坏到丑的顺序:
1。导致异常的实际行中断。一切都好:这是“正确”的行为
2.在onCreateMain表单(如上)中的行上断开。内部异常会产生污垢。无法让它在抛出异常的过程中中断(例如,查看实际发生的情况)
3.在空白(无代码)窗口上中断。顶部写着“没有可用的源代码:调用堆栈只包含外部代码”
4.无中断。例外被吞没了。抛出异常的过程刚刚被放弃;抛出后的行不会执行。节目继续,吹着欢快的口哨,希望我没注意到
显然,我想要行为1。这是我发现的
- 构建平台和“首选32位”设置在这方面完全没有区别 测试
- 启用在抛出异常时中断(在调试/异常对话框中)可以使一切正常工作(良好行为1)
- 如果未启用此选项,Form.Load中的代码总是会导致丑陋的行为4(异常)
- 如果不启用此选项,Form.New中的代码将执行以下两项操作之一。如果启用JustMyCode,则会出现不良行为3(“无可用源”)。如果没有,我会出现不良行为2(中断创建表单的调用-无法进入新构造函数查看发生了什么)
我还安装了前面回答中提到的修补程序,并尝试在Sub-Main过程中设置异常处理程序,但这似乎也没有解决问题。抛出异常时中断是我的最佳选择吗?最简单的解决方法:使用Win8 使用VS2012(VB)测试的形式_负载中的除零异常: Win7x64
AnyCPU : Swallow
x86 : Swallow
x64 : App dies without notice
Win8x64
AnyCPU : Break into debugger
x86 : Break into debugger
x64 : App dies without notice
<> >如果你只想让它工作,你可以考虑用Win8……< /p> < p>我怀疑这是发生在<代码>表单中。新的< /代码>但是我确认这发生在
Form.Load
在与常规表单事件不同的线程上运行,因此错误处理在那里有不同的行为
建议:避免表单。加载,将代码移动到表单。新建和表单。显示。使用Form.Load
是来自到的程序员的习惯,但在后者中,它有完全不同的行为(Windows本机的行为),这是许多程序员所不知道的
了解更多信息:回答得好!但不幸的是,我没有Win8或者在工作中使用它的能力。有趣的是,在任何一个操作系统上构建x64时,都会出现“应用程序死亡”。我一点也不明白。在表单加载中尝试了一个div/0-得到了Overflowexception(在抛出异常时中断)或swallow(关闭)。这可能是Microsoft的说法:“pssssst..想购买更新吗?”。如果其他人看到同样的行为,可能会很有趣,因为我不确定我的Win8机器。这是一个更新的Win7,其中VS2005/08/10和12RC是在VS2012RTM之前安装的。因此,我多年来安装的某些东西仍然有可能使它“工作”(=中断)