【发布时间】:2012-03-13 16:07:02
【问题描述】:
我有一个 Windows c# 应用程序 (WPF) - 它非常大,并且正在进行大量的多线程处理。
我的问题是,我知道应用程序中存在的几个死锁首先 - 其次 - 我害怕在没有检测潜在新死锁的方法并且无法以某种方式向我们报告的情况下释放它.
该应用程序有一个伴侣 - 一个名为 Launcher 的小型可执行文件(再次是 wpf c#) - 它用于从自身启动真正的进程。
为什么?因为当主应用程序崩溃时,我将所有错误和外部输出重定向到启动器。
反过来 - 当检测到崩溃时 - 启动器启动另一个可执行文件 - BugReports - 将错误信息传递给它。
稍后 - BugReports 提交此信息,一些用户将 cmets 输入到 Web 服务。
设置是这样的:
Launcher - 用于启动主应用程序并检测它何时退出 MainApp - 由 Launcher 启动 BugReports - 由 Launcher 启动 - 当检测到崩溃时。 Launcher 获取的崩溃信息通过命令行传递给 BugReports。它将信息提交给网络服务。
困惑我知道:)
这对于未处理的异常非常有效......
在 Launcher 的最后一个版本中,我决定集成一个 WatchDog 计时器。它应该每 30 秒监控一次 MainApp 并检测它是否处于锁定状态(例如死锁)。
如果它检测到 - 它将杀死它并再次启动 BugReports。
完美运行 - 每次 MainApp 停止时 - 它都会被检测到,并且所有必要的进程都可以正常工作。
问题:
我需要以某种方式获取 MainApp 中线程状态的“快照”——它们所处的位置(模块、方法)、它们所处的状态以及我可以获得的任何更有用的信息,以便我们找出潜在的位置发生了死锁。
现在我已经查了一半的互联网,但我无法以我想要的方式找到这样的东西。
基本上 - 这个想法是获得鸟瞰 - 就好像我在 Visual Studio 调试器中暂停 MainApp 并可以检查每个线程的位置以及问题所在。
这可能吗?
关于我应该深入研究什么的任何指导方针?
谢谢, 马丁·K。
【问题讨论】:
标签: c# .net wpf windows debugging