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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2010编写的WinForm程序,在调试运行了几个小时候后弹出: 正在停止调试,但尚未完成你可以强制立即停止相关的知识,希望对你有一定的参考价值。

WinFrom程序是用VS2010编写调试的,多线程,并且对数据库和串口进行操作!
数据库采用连接池的机制,中间出了很多问题,并且都找出来了,数据库和串口的互斥访问也做的很好,
但是怎么运行后出现“ 正在停止调试,但尚未完成。你可以强制立即停止调试,但这可能会终止正在分离的任何进程”这个提示框出来啊?
如果不是调试,直接运行程序的话,几个小时候 程序自动关闭了!
这个是出现提示的截图,就是在程序运行后 几个小时或者 10多个小时候弹出来的错误!
不是执行一个功能要很长时间,我这个是实时监控的程序,我的意思是 程序跑了一段时间后

你用一个测CPU和内存占用率的软件,在你调试这个程序时看看你CPU和内存的使用率达到了怎样的高度。

可能的原因:
1、程序设计不合理,线程过多,达到了系统处理的极限而自动终止调试
2、有极占内存的死循环存在,检查下
3、有不安全代码(如果你是用C#编写的,这个可能性就较小了,或者说基本没有)

建议:重新检查一遍你的程序,最好拿一张白纸来边检查边画个程序流程图,画完后审视一番,问题、缺陷就一目了然了,多半还是程序设计上的不合理造成的。也可能是设计思路不佳,大方向上走偏了,这个的话就一定要把程序的前前后后在纸上设计好了之后再具体写代码。注意弄清楚你每一步的目的是要干什么,很重要的。画流程图的确是个好习惯,尤其在程序庞大、操作复杂的时候,擅画流程图将带来很大好处,不仅帮忙理清思路提高程序编写的效率,而且极大减少了错误的发生。

祝你好运咯~~追问

谢谢 云中飞鹊 对我的建议,
程序(用C#写的)中一共只有三个线程,一个主线程,两个子线程,不会是线程过多的原因吧,
边检查边画程序流程图是个很好的方法。。 可是我时间有点不多诶,就是应为时间不多,才导致当初设计不是很完善, 以致后来错误频繁,花了很大部分时间来解决错误问题,
但是这个错误非常神奇,很难找出来,很有可能是内存耗尽问题
我没比较程序运行前和运行几个小时之后的内存占有情况,我尝试着找找!

追答

如果一个程序运行几个到几十个小时,光从时间上来讲就肯定有大问题存在。而且可以这么说,那几个小时的运行周期,只不过是貌似运行了几个小时罢了,程序实际的运行时间不会这么长的,一般是前面的数分钟的确是程序在执行,数分钟过后,不管程序执行到了哪一步,资源耗尽了,但操作系统/编译器不是人,它不会看到不对劲之后马上终止掉运行,就像你用手按下(Shift+F5)去结束调试一样,而是按它既定的一套步骤一步一步的查找错误、判断错误、重新分配资源,而这个时间是相当漫长的。唯一的办法就是耐心的查找,或者更好的,用单步调试的办法逐语句、逐过程的调试,找出问题到底出在那个地方。你这种情况,用单步调试最好,很可能走到一个地方走不动了,这里就是问题所在了。试试吧!

参考技术A 这是一个debug版的吧,换成release版的从新发布一下吧 参考技术B p://wenku.baidu.com/view/fa1e57fe04a1b0717fd5ddf7.html" target="_blank">http://wenku.baidu.com/view/fa1e57fe04a1b0717fd5ddf7.html
另外,站长团上有产品团购,便宜有保证

C#的winform程序,引用了system.speech.dll,在本地win7,32机器正常运行,64位就报错

引用了system.speech.dll,在本地32位电脑的VS2013编写的程序,用的品台是x86,把x86的Debug下文件夹拷贝到别的文件夹点击exe可以正常运行,但是把这文件夹拷到别人64位电脑运行出错,初步分析了,出错原因就是下面这部分,如果我把涉及到system.speech.dll的部分代码去掉,程序可正常运行

SpeechSynthesizer synth = new SpeechSynthesizer();
synth.Speak("你好");

跑出异常如下
VoiceSynthesizer = “synth.VoiceSynthesizer”引发了类型“System.PlatformNotSupportedException”的异常
系统上未安装语音,或没有当前安全设置可用的语音...

调用第三方的DLL,需要将你的dll文件添加引用!(程序运行之后,dll文件会在你的项目文件夹的bin\debug\文件夹下)

然后在程序里面还要用代码引用一次!!

例如: [DllImport("win32.dll")]
使用dllImport需要添加程序集using System.Runtime.InteropServices;

下面是一个简单的例子:

public class ConnectNet

/// <summary>
/// 该类主要用于检测网络是否连通,调用系统自带的API函数wininet.dll
/// 使用该dll内的InternetGetConnectedState方法
/// </summary>
/// <param name="connnectionDescription">方法参数一,表示网络连接状态</param>
/// <param name="reservedValue">方法参数2,保留参数</param>
/// <returns>state ,类型为Bool</returns>
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int connnectionDescription, int reservedValue);

public bool IsConnected()

int i = 0;
bool state = InternetGetConnectedState(out i, 0);
return state;



追问

道理我都懂,你说的我都有做到,实际问题是则呢解决

参考技术A 建议你看一下VS中配置管理器的输出方式,一些老版本的程序很可能是选择了X86的输出,即在32位系统上运行的,SERVER08一般都是64位的系统,所以会运行失败。追问

我确实选的x86输出,我故意的,因为程序用到其他的dll是x86的,所以不能选择x64和anyCpu,所以现在究竟怎么来解决

参考技术B 32位的system.speech.dll 跟 64位的system.speech.dll 不一样 分开引用

以上是关于VS2010编写的WinForm程序,在调试运行了几个小时候后弹出: 正在停止调试,但尚未完成你可以强制立即停止的主要内容,如果未能解决你的问题,请参考以下文章

vs2010在win10中打包winform程序,无法在win7上运行,win10正常运行。

vs2010编写的代码在不同机器调试,运行结果不同,怎么回事

VS工具下C#编写的WinForm程序运行缓慢问题

VS2010 winform开发使用水晶报表,程序本机运行正常 放到其它机子运行报错。跪求解决办法!!!

winform关闭窗口

在VS2010的VC++中如何编译、链接、运行、调试程序