偶然看到,也许有用!

VS2010编写的WinForm程序,在调试运行了几个小时候后弹出: 正在停止调试,但尚未完成你可以强制立即停止

2011-04-06 16:50hsy198845 | 分类:C#/.NET | 浏览1025次
WinFrom程序是用VS2010编写调试的,多线程,并且对数据库和串口进行操作! 数据库采用连接池的机制,中间出了很多问题,并且都找出来了,数据库和串口的互斥访问也做的很好, 但是怎么运行后出现“ 正在停止调试,但尚未完成。你可以强制立即停止调试,但这可能会终止正在分离的任何进程”这个提示框出来啊?   如果不是调试,直接运行程序的话,几个小时候 程序自动关闭了!

这个是出现提示的截图,就是在程序运行后 几个小时或者  10多个小时候弹出来的错误!

不是执行一个功能要很长时间,我这个是实时监控的程序,我的意思是 程序跑了一段时间后

向左转|向右转

 

 

 
2011-04-06 19:13提问者采纳
 
你用一个测CPU和内存占用率的软件,在你调试这个程序时看看你CPU和内存的使用率达到了怎样的高度。
可能的原因: 1、程序设计不合理,线程过多,达到了系统处理的极限而自动终止调试 2、有极占内存的死循环存在,检查下 3、有不安全代码(如果你是用C#编写的,这个可能性就较小了,或者说基本没有)
建议:重新检查一遍你的程序,最好拿一张白纸来边检查边画个程序流程图,画完后审视一番,问题、缺陷就一目了然了,多半还是程序设计上的不合理造成的。也可能是设计思路不佳,大方向上走偏了,这个的话就一定要把程序的前前后后在纸上设计好了之后再具体写代码。注意弄清楚你每一步的目的是要干什么,很重要的。画流程图的确是个好习惯,尤其在程序庞大、操作复杂的时候,擅画流程图将带来很大好处,不仅帮忙理清思路提高程序编写的效率,而且极大减少了错误的发生。
祝你好运咯~~
追问
谢谢 云中飞鹊 对我的建议, 程序(用C#写的)中一共只有三个线程,一个主线程,两个子线程,不会是线程过多的原因吧, 边检查边画程序流程图是个很好的方法。。 可是我时间有点不多诶,就是应为时间不多,才导致当初设计不是很完善, 以致后来错误频繁,花了很大部分时间来解决错误问题, 但是这个错误非常神奇,很难找出来,很有可能是内存耗尽问题 我没比较程序运行前和运行几个小时之后的内存占有情况,我尝试着找找!
回答
如果一个程序运行几个到几十个小时,光从时间上来讲就肯定有大问题存在。而且可以这么说,那几个小时的运行周期,只不过是貌似运行了几个小时罢了,程序实际的运行时间不会这么长的,一般是前面的数分钟的确是程序在执行,数分钟过后,不管程序执行到了哪一步,资源耗尽了,但操作系统/编译器不是人,它不会看到不对劲之后马上终止掉运行,就像你用手按下(Shift+F5)去结束调试一样,而是按它既定的一套步骤一步一步的查找错误、判断错误、重新分配资源,而这个时间是相当漫长的。唯一的办法就是耐心的查找,或者更好的,用单步调试的办法逐语句、逐过程的调试,找出问题到底出在那个地方。你这种情况,用单步调试最好,很可能走到一个地方走不动了,这里就是问题所在了。试试吧!

posted on 2013-07-30 19:51  公诚勇毅  阅读(282)  评论(0编辑  收藏  举报

导航