我有一个WPF监控应用程序,它使用单独的(内部开发的)C#测试 用于执行测试并监视和记录结果的基础结构。我还使用商业软件包(InGear)与PLC通信。因此,应用程序有很多线程(其中大部分是由我使用的工具创建的)。
由于环境的性质,在目标环境中使用调试器非常困难;所以,我们都使用log4net来记录诊断。
我在外部调用中使用try / catch块,并且还在WPF和AppDomain级别设置了未处理的异常处理程序。
在我们第一次长时间运行期间,应用程序似乎已无响应,我得到了标准的“无响应”对话框。看着日志似乎一切都停止了。例如:我可以从日志中看到DispatcherTimer设置为在1秒内响应主线程;但是,从来没有。
所以....我的问题是:
答案 0 :(得分:0)
可能过于简单,但是如何将调试器附加到进程,执行'Break All'然后检查各种线程的堆栈跟踪?
答案 1 :(得分:0)
我无法确定在Windows之前检测“挂起”的方法,我能够捕获Windows超时异常并最终将问题跟踪到Oracle .NET组件中的非托管代码。