社区
进程/线程/DLL
帖子详情
求助!程序出现死循环
naezhou
2009-08-21 08:59:43
一个程序,在特定的情况下会出现死循环,怎么才能在程序死循环的时候得到此时的调用栈?(这个程序是debug版的)
自己有源代码,代码量很大,调试运行的时候不一定能出现死循环的情况。
求教。
...全文
396
28
打赏
收藏
求助!程序出现死循环
一个程序,在特定的情况下会出现死循环,怎么才能在程序死循环的时候得到此时的调用栈?(这个程序是debug版的) 自己有源代码,代码量很大,调试运行的时候不一定能出现死循环的情况。 求教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2009-08-22
打赏
举报
回复
本人看法,本人觉得调试方法要灵活多变:
我主要用的方法是:
1,断点调试法,通过设置断点找到具体出错的地方。
2,用MessageBox();这个函数来调试,因为这个函数可以截住进程,有时我发现这个方法挺有效,能方便程序员找到程序出错的地方。
naezhou
2009-08-22
打赏
举报
回复
[Quote=引用 20 楼 tr0j4n 的回复:]
为什么你确定是死循环了?
[/Quote]
程序有显示每秒更新的tick,tick不动了,程序还在运行,所以是死循环。
naezhou
2009-08-22
打赏
举报
回复
to 17#
说实话第一次听说调试日志。程序的逻辑部分是单线程,应该不是多线程的问题。
to 18#
代码很多,log方法比较慢。
程序dump到了一个文件,windbg分析到的结果不是很有效,看不出问题出在哪里,dump到其他文件再做分析。
to all
谢谢大家热心解答。
MoXiaoRab
2009-08-22
打赏
举报
回复
今天下午CSDN升级,现在才有空上。
ziplj
2009-08-22
打赏
举报
回复
[Quote=引用 20 楼 tr0j4n 的回复:]
为什么你确定是死循环了?
[/Quote]
这晚还没睡...
MoXiaoRab
2009-08-22
打赏
举报
回复
为什么你确定是死循环了?
naezhou
2009-08-22
打赏
举报
回复
to 13#, 16#
这个方法也可以,不过程序是独立运行的,因为一些不便的原因,不能在vs中。
naezhou
2009-08-22
打赏
举报
回复
出现死循环的时候dump现场,然后用windbg分析,问题已经解决。
再次感谢大家热心解答!
chm_8611
2009-08-22
打赏
举报
回复
一个个模块的设置断点
pady_pady
2009-08-22
打赏
举报
回复
添加一个log类用来保存信息,所有有可能出错的地方都向log 写进去,当然对于楼主那么大的程序,似乎不好办,写log的好处就是可以在用户使用的时候自动记录错误,有必要可以用seh捕捉异常,并上传log,这要看你程序是怎么架构的
whg01
2009-08-21
打赏
举报
回复
磨刀不误砍柴工,加log吧。如果你的bug很快能复现,可以用分治的办法(就是类似二分查找)来加log排除。
Conry
2009-08-21
打赏
举报
回复
这么大的程序居然没有调试日志么?
估计不是死循环,而是多线程造成的死锁吧
无言猪
2009-08-21
打赏
举报
回复
如果是VC6,暂停调试,在Debug选项下面看Thread,一个一个线程看,看有没有出现while,或者是阻塞模式的函数的调用.
ziplj
2009-08-21
打赏
举报
回复
[Quote=引用 13 楼 jameshooo 的回复:]
你怎么判断出是死循环的?状态是什么?CPU占有率高吗?界面有响应吗?这些现象能缩小问题范围。
即使真的是死循环,也不是没办法检查,通过VS启动程序,在你认为出问题的时候,直接点击VS的暂停运行按钮,可能VS会提示没有代码,没有关系,这说明中断的地方在API里面,此时从调用栈窗口查看你的代码运行到哪了,简单分析一下,剩下的事情就是单步跟踪。
[/Quote]
检测死循环可以通过设置变量来检测啊?? 如果变量相当大(每次循环都自增一) 应该就可以判断死循环了
naezhou
2009-08-21
打赏
举报
回复
[Quote=引用 12 楼 tttyd 的回复:]
10M的代码?不会最后之编译成一个可执行文件吧?
系统分成了多少个模块?
先找到可能出问题的模块,再慢慢调试这个模块的代码
[/Quote]
恩,不是一个可执行文件。出问题的可执行文件代码不到2M。这个代码也很多了,死循环出现的时机不定,靠一部分一部分地删除功能不太靠谱
jameshooo
2009-08-21
打赏
举报
回复
你怎么判断出是死循环的?状态是什么?CPU占有率高吗?界面有响应吗?这些现象能缩小问题范围。
即使真的是死循环,也不是没办法检查,通过VS启动程序,在你认为出问题的时候,直接点击VS的暂停运行按钮,可能VS会提示没有代码,没有关系,这说明中断的地方在API里面,此时从调用栈窗口查看你的代码运行到哪了,简单分析一下,剩下的事情就是单步跟踪。
雪影
2009-08-21
打赏
举报
回复
10M的代码?不会最后之编译成一个可执行文件吧?
系统分成了多少个模块?
先找到可能出问题的模块,再慢慢调试这个模块的代码
naezhou
2009-08-21
打赏
举报
回复
[Quote=引用 7 楼 gordon3000 的回复:]
在状态栏或者工具栏上加一个进度条和一个提示行,程序在做什么,做了多少就一目了然了。
这个东西不仅是调试有用,软件发行加上也是好东西。
[/Quote]
这个不错,不过解不了近渴。
naezhou
2009-08-21
打赏
举报
回复
[Quote=引用 8 楼 ziplj 的回复:]
引用 2 楼 ziplj 的回复:
你可以试试dump一个文件 用WinDbg调试 重现错误现场
前提还是 你要知道检测死循环发生了在dump文件
[/Quote]
目前正在使用这个方法,现在还没有结果。不知道还有没有其他好的方法?
naezhou
2009-08-21
打赏
举报
回复
[Quote=引用 6 楼 ziplj 的回复:]
引用 4 楼 naezhou 的回复:
引用 1 楼 xiaoc1026 的回复:
一般这种情况是采用逐步缩小范围的方法来定位错误。
一部分一部分的把程序中的功能砍去
代码量在10M左右,而且这个错误不一定在什么时候出现
10M....
我靠 100W行左右的代码??
[/Quote]
代码量很大,所以这个问题比较难办。
加载更多回复(8)
一个简单的java爬虫产品
最近一直在研究爬虫和Lucene,虽然开始决定选用Heritrix来执行爬虫操作,但是后来发现用它来做还是存在一定的问题,比如需要
程序
生成相应的XML文件,对于同一个Job,怎样才能保证重复运行该Job时文件夹始终是同一个(Heritrix为Job创建文件夹的规则是“Job名称-时间戳”)等等,都是需要考虑的问题,最终还是将其搁浅。 后来google了一下,找到了一个简单爬虫的
程序
代码(http://www.blogjava.net/Jack2007/archive/2008/03/24/188138.html),随即试验了一下,发现确实能得到网页的内容,在这里还是要谢谢代码的提供者——Jack.Wang。 虽然试验成功,但是在随后的大数据量试验时,还是
出现
了问题。最初试验时,我只是让
程序
去抓取10个URL链接,当我将URL链接数改为100个时,问题
出现
了——URL中存在重复,而且非常容易的就变成
死循环
。举个例子来说,比如我首先爬的是A.html,在A.html中有两个链接:B.html,C.html,等爬完A.html以后,
程序
会爬B.html,这时如果B.html中的所有链接中有A.html这个页面的链接,那么
程序
又会去爬A.html这个页面,如此一来就形成了一个
死循环
,永远也不能停止。 跟踪
程序
发现,原来是在添加要抓取的网页的链接列表中,没有将已经抓取过的URL去除,所以才造成了
死循环
。现在虽然加上了这个判断,但是从我运行
程序
的效果来看,也不是很理想,总是感觉有些慢,800个页面要一两分钟才能爬完,这个我觉得有点说不过去。 这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,
求助
的。 1.关于对应关系数据的保存方式 在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要对应的,也许是经验太少吧,我采取的是通过构建一个JavaBean的方式来传递的,不知道大家有没有更好的方法 2.关于要创建索引的内容的保存方式 最初的想法是不创建文件,直接将内容保存到变量中,然后创建索引,即先抓取网页的内容,然后将网页的内容和URL保存到自己构建的JavaBean对象中,接着将这个对象放到一个list列表中,等所有网页抓取完毕以后,将这个列表传到创建索引的方法中。这种做法看似不错,可是当URL数量很大时,会导致内存不够用,所以还是创建文件比较稳妥。 3.关于网页编码问题 遇到这个问题也是一个巧合,本来我抓取的是客户的一个网站,后来同事说如果客户看访问日志,这个月的数据会和平常的数据不一样,所以我就抓取公司的网站,结果,问题
出现
了。原先公司的网站是用GB2312编码做的页面,现在采用的是UTF-8的编码,虽然我已经判断了页面的编码,可是依然不能解决保存的文件中文乱码的问题,不知道大家有什么好办法没有。错误信息为:java.io.UnsupportedEncodingException 附件为爬虫代码 本文出自 “徘徊在c#,java,php之间” 博客,请务必保留此出处http://jerrysun.blog.51cto.com/745955/221879
易语言多线程防崩溃防卡死升级版例子-易语言
0、前面发的那版只是临时顺手写的,也没怎么检查,只有思路和流程有参考价值,但还是有网友表示支持,于是就有了这一版 1、测试发现精易模块 的函数比易语言 自带的更稳定,这一版本果断使用了精易模块 2、用于改动核心
程序
就可用于自己的功能,多线程控制模块已经测试好 3、保证有任务时启用的线程处于工作状态,完成任务的线程会自动分配的新的任务,不用等待其他线程 4、可以结束超时的任务,并且设定重试次数 5、重试达到次数还是失败的任务可以在超时处理设定后续处理 6、可以暂停、恢复、结束任务 7、模拟卡死测试,启用1248线程测试,
程序
运行流畅 8、获取qq昵称测试,100线程测试效果优秀,不要用800线程测,会被qq服务器拒绝,然后除了最开始几十个任务,其他所有任务超时退出的(不要问我怎么知道的) 9、不要问我测试的qq哪来的,我在本论坛
求助
版块无意中下载的某个
程序
顺手提取的数据,忘了是哪个帖子的哪个
程序
的 10、本来有心写个教程一起发上来的,但是最近确实有事没时间,直接发源码,有兴趣的自己去研究吧 11、够了,算上这条都12条了,就到这吧 12、12表示13其实是个很吉利的数字,所以还是13条吧...
手机 pdf 阅读器
请先阅读帮助文档:http://ismyway.com/help [2009.1.1] Ver 3.2.26 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 增加天语的按键映射 增加三星的背景灯控制功能(该功能未在真机上测试过) 删除图片浏览中的部分功能,由于这部分功能需要较大的内存,导致在大部分手机上无法完成,同时也引起背景图片无法设置成功 触摸屏用户可以不再受滚动条限制,在屏幕上任意地方都可以进行拖动 选择键盘映射为其它时无法再次更改的BUG 用户输入的颜色值无法保存的BUG 修正英文单词分词时会多添加一个空行的BUG 繁体语言措词上的修正 阅读设置中增加一个“文件缓存”选项,默认情况下是开启的,在NOKIA手机上会提高UMD等文件的表现,但由于测试并不充足,如果
程序
经常在阅读时出错,请关闭该选项(其它手机是否开启该选项并无明显的影响) 修正编辑文件后无法保存的BUG [2008.10.27] Ver 3.2.24 ※如果安装提示证书过期或无法安装,请在手机上将时间改为2008.8.8,安装设置完成后再将日期改回即可!※ 改进的颜色选择方式 允许用户重新选择键盘映射 HTML阅读时的错误 进一步完善编辑功能(仍有少许BUG,请继续反馈,谢谢) 新建文件后自动跳转到编辑中 改进的文件操作方式,速度轻微提升 UMD速度明显提升,并且减少内存占用,特别是在NOKIA手机上,表现提升超过600% 改进的输入框模式,以使得能适应更多的手机如天语等 [2008.10.21] Ver 3.2.23 为了提高运行效率,以下功能在LITE上将被取消(自定义欢迎页问候语;欢迎页背景图) 取消了JAR的支持,提高运行效率 修正打开大ZIP文件时的内存溢出错误 ·修正: 自动滚屏到末尾时,滚屏功能将停止 [2008.10.4] Ver 3.2.22 暂时删除了播放功能及网络相关的功能,由于以上两项功能一直没有能稳定下来,故暂时删除 增强了ZIP功能,支持带文件夹结构的ZIP/JAR文件 (对于大部分JAR电子书都,可以从文件管理器中找到非.class结尾的文件,并且选择打开为UNICODE/TXT阅读) (对于NOKIA手机及其它部分手机,由于安全策略的限制,在Anyview的文件管理器中无法查看后缀为.jar的文件) 自定义问候语(系统路径下dictum.rc文件,格式参见jar包中的dictum.rc文件,保存时使用UTF-8编码,可写条目为0~9/a~z/A~Z,置空时表示不显示问候语) ·修正: 0键在各偏好中切换时亮度混乱的问题 部分手机上无法新建文件夹 [2008.9.11] Ver 3.2.21 修正动画参数无法保存的BUG 动画效果不再对阅读翻页有作用 [2008.8.29] Ver 3.2.21 可将正在阅读的内容通过短信与好友分享 增加一种新的滚屏方式:波浪,同时,阅读时3键不再使用默认的像素滚屏,而会使用最后一次使用的滚屏方式 任何可用的外置字库都可以作为内置字库存在,在jar包中存在dot.font会被当为内置字库加载 加快大文件的打开速度,特别是对于NOKIA手机,S60上,打开20M文件,97%左右的位置不超过15秒 允许用户打开动画效果 ·M600/P990/P1/W950 修正键盘映射时“内存不足”的BUG ·E680/A780 选中后台播放后无法启动的BUG [2008.7.30] Ver 3.2.20 调整部分索爱手机上背景灯控制的逻辑 修正看图片时按0键出错的BUG 旋转屏幕引起的字外出 打开LRC最后出错 阅读到尾部弹出“上一个/下一个”窗口中的文件名过长不刷新的问题 偏好切换时亮度混乱的问题 在NOKIA上,当系统路径设置为根目录是无法启动的BUG E398上可以开关键盘灯 UIQ系统在退出时可以保持亮度 索爱上按“返回”键后导致阅读
出现
白屏的BUG 阅读时切换屏幕方向导致字体超出屏幕的BUG 欢迎屏幕上的日期使用中文显示 如果使用触屏手机,跳转改为进度条模式,以方便触屏操作 系统路径下如果存在bg.png文件,则会作为欢迎界面的背景图片显示(右下角) 减少跳转及翻页中
出现
乱码的机率 提高阅读时绘图效率,滚屏效率同样提高 播放时,暂停会导致声音爆至最大的BUG 内置“忘记月亮”制作的两款主题《典雅红》《黑橙》,并且更换主题不再要求退出 文件管理器中支持“剪切”功能 文件管理器中新增转换UMD为TXT的功能(解开操作,解开2无效!) 增加了编辑功能(尽管没有限制文件大小,但请别编辑过大的文件,另外,为了提高速度,不进行全文排版,有时候表现可能会有些不习惯),以后会进一步完善 启动时,会自动识别NOKIA、SONYER
close fd
死循环
_【
程序
求助
】
程序
貌似
死循环
了,一直显示BUSY!急求高手!
该楼层疑似违规已被系统折叠隐藏此楼查看此楼关于FFT实现音频水印的!
求助
!clc;clear;close all;%读入作为水印的二维图像FILE1='C:\Program Files\MATLAB71\work\matlab shuiyin\FFT\shuiyin.bmp';w=imread(FILE1);[M1,M2]=size(w);%图像降维并bit化W=reshape(w,1,M1*M...
linux gdb
死循环
,
求助
!GDB设置硬件断点后continue,系统进入类似
死循环
?(OpenOCD + AT91SAM7S)【恢复】...
在J-Link+GDBServer能够正常调试的前提下。用OpenOCDr717,WindowsXP+Cygwin:-------my-openocd-config-file.cfg----------#daemonconfigurationtelnet_port4444gdb_port3333daemon_startupreset#interfaceinterfaceft22...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章