我做了一个互联网数据采集程序,我把程序每个地方都用 try catch 包起来的写入日志,为的是程序稳定运行不被非法退出 ,但是最近大跌眼镜,
我用一个 开源的HtmlAgilityPack.HtmlDocument 用于分析源网页的内容,但是当遇到某些变态的网页嵌套标签太多,上千个标签嵌套的时候如:
http://bbs.xgo.com.cn/thread-206818-1-1.html
程序在
用HtmlAgilityPack.HtmlDocument.DocumentNode的.SelectNodes用过XPATH分析网页时异常,并且这个异常是try catch  无法捕捉的,一但产生异常只有退出的份
异常的内容为:
未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。 排错提示:确保你没有无限循环或递归
我想请问难道这是.NET 底层的错误 我们程序员已经没有办法解决了么? 我研究了HtmlAgilityPack.HtmlDocument的开源代码,也无法处理 遇到http://bbs.xgo.com.cn/thread-206818-1-1.html
的畸型网页时不可避免地退出,大家有什么解决方案帮帮忙

解决方案 »

  1.   

    未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。 排错提示:确保你没有无限循环或递归 
    这是栈溢出异常,检查下代码退出循环或递归的判断条件.
    在标签过杂的时候,可能有些你没有考虑到,好好检查下吧.
      

  2.   

    就算标签 嵌套的层数太多,但也有退出来的时候,就算是个死循环,程序也应该一直执行,大不了占着CPU,也是.NET 也没有必要认为我的程序有错非法地给我退出,并且退出还是强行的 TRY CATCH 对他无效,真是的很伤感情,并且这是
    是 HtmlAgilityPack.HtmlDocument 开源代码没有考虑好这种情况,我又不好改开源代码,我只想能把这个错误TRY 住,保证程序不会被退出,有没有什么办法硬TRY CATCH这个异常.如果实在不行 我就换种思想,在用HtmlAgilityPack.HtmlDocument之前先分析 网页源码是否包含太多的标签嵌套, 我可以判断字符串 </ 连续出现的最大次数 如果太大就不让HtmlAgilityPack.HtmlDocument去执行了谁知道 得到 字符串中 某个字符连续出现的最大次数算法
      

  3.   

    我把代码上传了,哪位热心人帮我看看 下载地址  http://lot.bolaa.com/htmldo.rar打开解决方案 调试 GetDocLinks 项目即可看到这个异常