我正在使用由 WCF 服务支持的 ASP.NET 站点,该服务随机抛出异常,最终在站点上捕获,并在那里创建 YSOD。我怀疑这是由于后端的线程问题造成的,并希望追踪该问题。
是否有一种简单的方法可以在 WCF 端捕获未捕获的异常,同时捕获所有正在运行的线程的堆栈跟踪,并使用附加信息重新抛出初始异常?
这个多线程跟踪似乎是框架附带的东西,或者其他人之前可能已经想到的东西,但我似乎找不到任何东西。
我正在使用由 WCF 服务支持的 ASP.NET 站点,该服务随机抛出异常,最终在站点上捕获,并在那里创建 YSOD。我怀疑这是由于后端的线程问题造成的,并希望追踪该问题。
是否有一种简单的方法可以在 WCF 端捕获未捕获的异常,同时捕获所有正在运行的线程的堆栈跟踪,并使用附加信息重新抛出初始异常?
这个多线程跟踪似乎是框架附带的东西,或者其他人之前可能已经想到的东西,但我似乎找不到任何东西。
为了捕获其他线程的堆栈跟踪,您必须在调试器中并在抛出异常时查看它们的堆栈(例如,使用并行堆栈窗口),但这不会让您将它们的跟踪发送回来。
您可以检测您的代码(即在战略位置使用它)来记录其他线程可以访问的堆栈跟踪,但这会带来令人讨厌的性能、维护和优雅问题。更不用说它只会近似其他线程正在做的事情,因为它们可以在抛出异常后独立前进。
我能想到的唯一其他方法(这是推测)是以某种方式中止其他线程,捕获中止,保存堆栈跟踪,然后重置中止。但这很可能是一个不确定的混乱。中止不是推荐的做法。
您可能最好使用呼叫分析器、大量日志记录并尽可能缩小范围以找到根本原因。