在生成的过程中捕获异常

时间:2020-03-06 14:40:07  来源:igfitidea点击:

我正在使用VS2008调试启动新进程的应用程序。我相信所产生的进程在启动过程中会遭受(和处理)某种CLR异常,但是在Debug-> Exceptions中打开CLR Exception Notification不会捕获该异常。关于如何查看异常发生位置的任何建议?我通常只添加到新产生的进程,但是由于异常是在启动时发生的,因此没有足够的时间来执行此操作。

解决方案

如果该过程在启动过程中失败,则CreateProcess应该返回错误代码。检查错误代码。

如果该过程在启动后立即失败,请检查该过程的返回码及其文档,日志等。

好吧,我们可以记录该错误。但这不允许我们查看。为此,我们可以考虑在异常处理程序中放置严重的延迟(或者无限循环)。这将为我们提供添加到流程并对其进行调试所需的所有时间。只要确保将其删除即可,然后再投入生产!!

我们可以在流程启动代码中添加对Debugger.Launch()的调用。这将启动添加到该过程的调试器(通常使我们可以选择使用VS2008的运行副本或者新副本)。对于调试服务启动问题,同样的技巧很方便。

如果我们可以控制此过程代码,请使用Debugger.Launch()。

如果没有,请尝试:

只需从命令行启动此过程,然后查看输出即可。如果有未处理的异常,将显示它。

如果未显示任何内容,请使用命令行调试器,然后使用命令ca [tch]。

另一个值得考虑的技巧是使用"图像文件执行选项",请参阅blogs.msdn.com上的这篇文章:http://blogs.msdn.com/greggm/archive/2005/02/21/377663. aspx,因为这不需要对子可执行文件或者父可执行文件进行任何更改。