救命有时候c# 用try catch捕捉不到异常导致应用程序强行退出 怎么办

sunjunfeng3 2009-04-12 04:00:27

我做了一个互联网数据采集程序,我把程序每个地方都用 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
的畸型网页时不可避免地退出,大家有什么解决方案帮帮忙
...全文
1485 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsdfwegwgwg 2012-08-21
  • 打赏
  • 举报
回复
8楼正解
Myth_NiuNiu 2009-04-12
  • 打赏
  • 举报
回复
学习,帮顶
wjhx 2009-04-12
  • 打赏
  • 举报
回复
应该是进入了递归一类的死循环中了,不是出错,而是一直在忙。
sushou2009 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 LemIST 的回复:]
引用 2 楼 sunjunfeng3 的回复:
就算标签 嵌套的层数太多,但也有退出来的时候,就算是个死循环,程序也应该一直执行,大不了占着CPU,也是.NET 也没有必要认为我的程序有错非法地给我退出,并且退出还是强行的 TRY CATCH 对他无效,真是的很伤感情,并且这是
是 HtmlAgilityPack.HtmlDocument 开源代码没有考虑好这种情况,我又不好改开源代码,我只想能把这个错误TRY 住,保证程序不会被退出,有没有什么办法硬TRY CATCH这个异常.

如…
[/Quote]
有代码就好了...可以直观点..
LemIST 2009-04-12
  • 打赏
  • 举报
回复
看到现象了,在帮你看:)
sunjunfeng3 2009-04-12
  • 打赏
  • 举报
回复
我把代码上传了,哪位热心人帮我看看 下载地址 http://lot.bolaa.com/htmldo.rar

打开解决方案 调试 GetDocLinks 项目即可看到这个异常
LemIST 2009-04-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sunjunfeng3 的回复:]
就算标签 嵌套的层数太多,但也有退出来的时候,就算是个死循环,程序也应该一直执行,大不了占着CPU,也是.NET 也没有必要认为我的程序有错非法地给我退出,并且退出还是强行的 TRY CATCH 对他无效,真是的很伤感情,并且这是
是 HtmlAgilityPack.HtmlDocument 开源代码没有考虑好这种情况,我又不好改开源代码,我只想能把这个错误TRY 住,保证程序不会被退出,有没有什么办法硬TRY CATCH这个异常.

如果实在不行 我就换种思想,在用Ht…
[/Quote]
呵呵,编程需要的是理性,好好检查下代码吧.看不到代码我也不知道怎么帮你了.
十八道胡同 2009-04-12
  • 打赏
  • 举报
回复
帮顶
sunjunfeng3 2009-04-12
  • 打赏
  • 举报
回复
就算标签 嵌套的层数太多,但也有退出来的时候,就算是个死循环,程序也应该一直执行,大不了占着CPU,也是.NET 也没有必要认为我的程序有错非法地给我退出,并且退出还是强行的 TRY CATCH 对他无效,真是的很伤感情,并且这是
是 HtmlAgilityPack.HtmlDocument 开源代码没有考虑好这种情况,我又不好改开源代码,我只想能把这个错误TRY 住,保证程序不会被退出,有没有什么办法硬TRY CATCH这个异常.

如果实在不行 我就换种思想,在用HtmlAgilityPack.HtmlDocument之前先分析 网页源码是否包含太多的标签嵌套,

我可以判断字符串 </ 连续出现的最大次数 如果太大就不让HtmlAgilityPack.HtmlDocument去执行了

谁知道 得到 字符串中 某个字符连续出现的最大次数算法
LemIST 2009-04-12
  • 打赏
  • 举报
回复
未处理的“System.StackOverflowException”类型的异常出现在 mscorlib.dll 中。 排错提示:确保你没有无限循环或递归
这是栈溢出异常,检查下代码退出循环或递归的判断条件.
在标签过杂的时候,可能有些你没有考虑到,好好检查下吧.

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧