查找程序中止的位置 (VB.net)
Find where a program aborts (VB.net)
我有一个巨大的 VB6 遗留程序,我刚刚将其转换为 VB.net。
主窗体显示在屏幕上,在进入 Windows 消息循环之前,我成功地在最后一个可执行行上打印了注释。
然后程序终止(所有 windows 消失),没有任何错误提示。
我一直无法确定此程序中止时正在执行什么代码,希望得到建议。
我是 运行 Visual Studio 2008 Professional(因为代码刚从 VB6 转换而来),使用调试器。
我在每个 timer_Tick 处理程序和每个 form_Activated 处理程序中添加了一个方法调用作为第一行。我也在许多主要功能中进行相同的调用。在我调用的 sub 的第一行中设置了一个断点...并且在消息循环开始后它没有命中。
我试图查看所有 Windows 消息,但不熟悉 Spy++ 工具,并且完全被消息淹没了。我知道我可以限制到一个特定的 window,因为我的程序打开了很多 windows,它可能是一个试图打开的新程序导致失败。
如果我没有找到其他解决方案,我可以使用 Spy++ 进行进一步研究,但我真的很想获得其他关于查找位置的建议。
谢谢。
尝试在 Visual Studio 调试器中启用所有异常。在 DEBUG 菜单中,select Exceptions 并选中 Thrown 下的所有框。 (稍后您可以使用 Reset All 恢复为默认设置。)这可能会暴露许多异常,这些异常本来可以处理,您可以忽略,但也可能会导致您找到根本问题。
如果没有代码,这是一个猜测,但它会与您描述的情况相符。当应用程序从 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
启动的。如果您只是显示您的起始表单(and/or 其他),应用程序将在 Sub Main
终止时终止,因为没有应用程序消息泵。
我有一个巨大的 VB6 遗留程序,我刚刚将其转换为 VB.net。 主窗体显示在屏幕上,在进入 Windows 消息循环之前,我成功地在最后一个可执行行上打印了注释。
然后程序终止(所有 windows 消失),没有任何错误提示。
我一直无法确定此程序中止时正在执行什么代码,希望得到建议。
我是 运行 Visual Studio 2008 Professional(因为代码刚从 VB6 转换而来),使用调试器。
我在每个 timer_Tick 处理程序和每个 form_Activated 处理程序中添加了一个方法调用作为第一行。我也在许多主要功能中进行相同的调用。在我调用的 sub 的第一行中设置了一个断点...并且在消息循环开始后它没有命中。
我试图查看所有 Windows 消息,但不熟悉 Spy++ 工具,并且完全被消息淹没了。我知道我可以限制到一个特定的 window,因为我的程序打开了很多 windows,它可能是一个试图打开的新程序导致失败。
如果我没有找到其他解决方案,我可以使用 Spy++ 进行进一步研究,但我真的很想获得其他关于查找位置的建议。
谢谢。
尝试在 Visual Studio 调试器中启用所有异常。在 DEBUG 菜单中,select Exceptions 并选中 Thrown 下的所有框。 (稍后您可以使用 Reset All 恢复为默认设置。)这可能会暴露许多异常,这些异常本来可以处理,您可以忽略,但也可能会导致您找到根本问题。
如果没有代码,这是一个猜测,但它会与您描述的情况相符。当应用程序从 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
启动的。如果您只是显示您的起始表单(and/or 其他),应用程序将在 Sub Main
终止时终止,因为没有应用程序消息泵。