我的问题是,我看不到任何托管堆栈或切换到任何线程.在调试器中断时,它们都被拆除了.
我不是Windbg专家,而且,除了在实时系统上安装Visual Studio或使用该工具进行远程调试和调试外,是否有人建议如何从违规线程中获取堆栈跟踪?
这就是我正在做的事情.
!threads
…
XXXX 11 27c 000000001b2175f0 b220 disabled 00000000072c9058:00000000072cad80 0000000019bdd3f0 0 Ukn System.StackOverflowException (0000000000c010d0)
…
此时你会看到XXXX ID表明线程已经死了.
解决方法
此外,根据the documentation,您无法从.Net 2.0开始捕获StackOverflowException,因此使用try / catch包围您的代码的其他建议可能不起作用.考虑到堆栈溢出的副作用,这是非常有意义的(我很惊讶.Net曾经让你抓住它).
您唯一真正的选择是参与分析代码的繁琐工作,寻找可能导致堆栈溢出的任何内容,并添加某种标记,以便您可以在它们发生之前了解它们发生的位置.例如,显然任何递归方法都是第一个开始的方法,所以给它们一个深度计数器,如果它们达到你定义的某个“不合理”值,就抛出你自己的异常,这样你就可以实际获得有效的堆栈跟踪.
原文地址:https://www.jb51.cc/csharp/243925.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。