查找程序中止的位置(VB.net)

时间:2015-07-14 17:22:39

标签: vb.net abort

我有一个巨大的VB6遗留程序,我刚刚转换为VB.net。 主窗体显示在屏幕上,我在进入Windows消息循环之前成功地在最后一个可执行行上打印注释。

然后程序死掉(所有窗口都消失了),没有任何错误的迹象。

当程序中止时,我无法确定正在执行的代码,并且会很感激。

我在Visual Studio 2008 Professional中运行(因为代码刚从VB6转换而来),使用调试器。

我在每个timer_Tick处理程序和每个form_Activated处理程序中添加了一个方法调用作为第一行。我也在许多主要功能中做同样的调用。在我调用的子行的第一行中设置了一个断点...并且在消息循环开始后它没有被点击。

我试图查看所有Windows消息,但我不熟悉Spy ++工具,并且完全被消息所淹没。我知道我可以限制到一个特定的窗口,通过我的程序打开许多窗口,它可能是一个新的试图打开导致失败。

如果我没有得到其他解决方案,我可以使用Spy ++进一步研究,但我真的很想得到其他关于找到位置的建议。

感谢。

2 个答案:

答案 0 :(得分:2)

尝试在Visual Studio调试器中启用所有异常。从DEBUG菜单中,选择Exceptions并选中Thrown下的所有框。 (稍后您可以使用“全部重置”恢复为默认设置。)这可能会暴露许多异常处理,您可以忽略这些异常,但也可能导致根本问题。

答案 1 :(得分:1)

没有代码,这是猜测,但它会与您描述的内容相匹配。当应用从Sub Main开始时,您的代码必须启动消息泵 - 它不会自动发生:

Public Sub Main()
     ...
    ' same as `Enable XP Visual Styles in App settings
    Application.EnableVisualStyles()

    ...
    ' last line
    Application.Run(New MainForm())
End Sub

如果要使用视觉样式,则需要在引用任何表单或控件之前启用它们。

消息泵通过Application.Run启动。如果您只是显示您的起始表单(和/或其他内容),则应用程序将在Sub Main终止时终止,因为没有应用消息泵。