我有一个使用一个单独的(内部开发)C#测试 基础设施,以执行测试和监视和记录结果的WPF监控应用。我还使用商业软件包(InGear)与PLC进行通信。因此,该应用程序有很多线程(其中大部分是由我使用的工具创建的)。如何捕获为什么我的应用程序信息“挂”
因为环境的性质,这将是非常难用在目标环境中调试器;所以,我们都使用log4net来记录诊断。
我都在WPF和AppDomain的水平使用try/catch块在我的周围外部调用,也已经建立了未处理的异常处理程序。
在我们的第一个长期运行出现的应用程序已经成为不响应,我得到了标准的“没有响应”对话框。看着日志,似乎一切都停止了。例如:我可以从日志中看到DispatcherTimer被设置为在1秒内对主线程做出响应;但是,从来没有。
所以....我的问题是:
- 我如何检测挂起或挂接到窗口的检测,我挂?请注意,我假设它可能是更高优先级的线程,阻止了我的用户界面;所以,我可能无法回应Windows消息。
- 一旦我开始接触,我怎么找出什么线程是罪魁祸首。能够将日志的调用堆栈放在一个很大的优势上。
我相信捕捉使用WinDbg的工具将帮助进程转储。我没有自己的工作,但你可以搜索细节。 – ryadavilli
在我正在另一家公司工作的C++应用程序中,我们有两个线程互相关注,并在出现任何问题时执行崩溃转储。我也在考虑添加一个可以导入WinDbg的[MiniDump](http://msdn.microsoft.com/en-us/library/ms680360(VS.85).aspx)。我可能会在这里看看;但是,我必须能够首先捕捉错误。我不能在单位周围坐下来等待它崩溃。 – markshancock