gpt4 book ai didi

c# - 抛出异常时捕获所有线程的堆栈跟踪

转载 作者:行者123 更新时间:2023-11-30 12:32:04 25 4
gpt4 key购买 nike

我正在使用一个由 WCF 服务支持的 ASP.NET 站点,该服务随机抛出异常,最终在该站点上捕获,并在那里创建一个 YSOD。我怀疑这是由于后端的线程问题造成的,我想跟踪这个问题。

有没有一种简单的方法可以在 WCF 端捕获未捕获的异常,同时捕获所有正在运行的线程的堆栈跟踪,并使用附加信息重新抛出初始异常?

这个多线程跟踪似乎是框架附带的东西,或者其他人以前可能已经想到过,但我似乎找不到任何东西。

最佳答案

为了捕获其他线程的堆栈跟踪,您必须在调试器中并在抛出异常时查看它们的堆栈(例如,使用并行堆栈窗口),但这不允许您发送它们追溯。

您可以检测您的代码(即,将其放在战略位置)以记录其他线程可以到达的堆栈跟踪,但这会带来令人讨厌的性能、维护和优雅问题。更不用说它只会近似于其他线程正在做的事情,因为它们可以在抛出异常后独立推进。

我能想到的唯一其他方法(这是推测)是以某种方式中止其他线程,捕获中止,保存堆栈跟踪,然后重置中止。但这很可能是一个不确定的困惑局面。不推荐中止。

您可能最好使用调用分析器、大量日志记录并尽可能缩小范围以找到根本原因。

关于c# - 抛出异常时捕获所有线程的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12177179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com