我用VS2010 + c# + sql2000环境下开发的程序,可执行文件名为:Weig.exe。该程序不知怎么搞得总是运行一段时间突然弹出错误信息窗口:Weig.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。如果您正处于进程当中,信息有可能丢失......。点击窗口中的"确定"按钮,该程序立即退出,返回操作系统桌面。这个错误信息窗口弹出的时机不定,可能程序运行十几分钟后弹出,可能五六个小时才弹出,总之一定会弹出,一旦弹出程序必定无法再运行下去了。请教各位高手这种情况一般是何原因造成的?由于时机不定,你都无法设个什么断点来进行跟踪查找原因。有何应对之策?谢谢了!

解决方案 »

  1.   

    是否使用了webbrowser、axtivex控件、和office等程序交互、api调用、访问硬件、多线程和使用不安全代码?
      

  2.   

    我猜估计你程序中可能使用了api或者office组件,之前我的程序也出现过类似情况,原因就在office组件上,先确认你的操作系统,如果是win7,就尽量用2007版本的office组件编译。
    另外,确认程序中的组件的兼容性问题,应该可以解决。
      

  3.   

    结帖率100.46%,未结帖:-3,擦
    以上题外话
    这个,你要在可能出错的地方catch错误记录下日志才好查找是什么问题
      

  4.   


    这跟楼主的问题没有关系。如果他只是不知道出错语句,那么不用任何try...catch,运行时.net程序就会把详细的异常信息打印出来。
      

  5.   

    没有什么别的话啊?假设是普通的异常,我们的调试器就能给出详细的异常堆栈,而写上try...catch反而是阻碍了vs调试器来定位异常啊?!
      

  6.   

    所以我们要想调试产品,就要避免有try..catch代码,避免有含糊的什么“提示”,更要避免带着bug继续运行那种程序。异常被vs调试器准确地中断下来,你才可能调试。如果说写一堆try...catch代码还说自己经常调试程序,我觉得这也就是瞎敲敲键盘鼠标,调试不出什么东西。
      

  7.   

    sp1234说的避免try..catch代码,并不是没有道理。这是针对很多人try..catch写不好,log的时机,内容都不对,还不如不catch。但是vs调试器也有缺点的,比如,虽然错误定位准确,但是,缺少重要的方法参数值的信息。所以,最好的办法还是自己打log。修正错误,不管是哪种错误,基本的思路都差不多:
    1.重现错误
    2.找出规律
    3.找到原因log,断点都是辅助的手段而已。
      

  8.   

    很有可能是系统中某个点注册了后台执行的方法(Timer或挂起的线程Thread),LZ可以往这方面追踪下