如何监控线程堆栈深度?

问题描述

我遇到了一些与 EntityFramework 相关的 StackOverflowException 问题,我希望能够测量应用程序线程中的堆栈大小,以便更好地判断我尝试解决问题的效率。

>

我想知道是否有一种标准方法可以在应用程序运行时测量应用程序中每个线程(或特定线程)的最大堆栈大小,然后在执行完成后分析此数据。

由于我不拥有当前生成深层堆栈的代码,因此我无法使用任何自定义类轻松检测此类代码

有没有办法使用性能计数器等分析机制来监控堆栈大小?这将是理想的,因为它允许我们监控值(可能是实时的)并轻松地为这些数据生成图表,甚至在值超过某个阈值时创建警告。

我知道我可以在崩溃后使用 WinDbg 检查堆栈大小(仍然不太容易看到),并且我可以使用任何自定义线程大小创建自己的线程或使用 EDITBIN 工具更改认线程大小.然而,这些方法是“基于试错法”的,并且会使我的测试变得非常复杂,因为我必须依靠强制 StackOverflowException 在各种配置中发生。

这类似于 How can I measure thread stack depth?,虽然它是针对 Java 的,而这是针对 .Net 的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)