4

我正在运行一个网络爬虫并使用 HtmlAgilityPack 解析页面内容,并在该 C# 库中随机获取 StackOverflowException,但是当我尝试查看我的代码的调用堆栈列表时,我得到:

“已超出 Visual Studio 支持的最大堆栈帧数。”

旁注:我已经在使用sjdirect 的HAP 修复程序。

这是一个快照(它一直像这样重复)。

有没有办法将 Visual Studio 可以跟踪的堆栈帧的数量扩大到至少与应用程序在填充其堆栈之前可以分配的一样多?或者可以反过来做,即减少被调试应用程序的堆栈大小?

4

2 回答 2

1

StackOverflowExceptions 的问题在于它们太深了,以至于堆栈实际上被丢弃了。该页面有一个递归示例,该示例导致此条件最终在堆栈上具有 80,000 个级别。

考虑到我上次阅读的 VS 仍然是一个模拟 64 位调试的 32 位应用程序,您可能已经远远超出了 VS 为您管理堆栈级别数量的可用内存。

于 2015-06-09T20:37:39.877 回答
1

没有明显的功能可以限制 CLR 应用程序的堆栈大小或增加 Visual Studio 的跟踪堆栈帧数。

作为一种解决方案,我将放弃 HtmlAgilityPack 来提取文本(这样的东西并不是真正的解决方案)并为自己编写一个老式的 HTML 到文本解析器或尝试在 StackOverflow 上发布的其他类似问题的答案之一(非常相似到马特克劳奇的问题,虽然没有一个答案适合从数千页中提取可渲染文本)

编辑:虽然通常不推荐使用正则表达式,但这实际上解决了我的问题(无需处理 StackOverflowException):将 HTML 转换为纯文本

感谢您的努力,我希望这对其他人有所帮助。

于 2015-06-10T21:31:11.563 回答