C++程序运行一段时间死掉是什么原因 啊????

时间:2022-03-01 15:24:51
关于这个程序: 
1.是一个游戏程序。一只蚂蚁在特定区域运动。键盘控制运动方向。
2.程序运行一段时间,死掉
3.查看任务管理器,各项值都正常
4.内存正常

我的问题:
关于这个问题,不知道哪调试起,不知道是什么原因!

如果可以调试,从哪着手调试?这是什么原因导致的呢?我不知道从哪首着手,解决问题?


最后:
各位早点休息,注意身体,谢谢!

18 个解决方案

#1


没有死循环吗?
看样子是最后按键盘没反应了,是不是你的控制变量逻辑有问题,比如向上跑出了边界?

#2


跟踪试调一下,
运行之后,鼠标不动看是否还会挂,
再看变量的类型,范围是否出现异常

#3


死循环 或者 你的程序重绘出问题了。耗掉了资源。

#4


边界控制的问题?有可能是死循环呀。

#5


我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

#6


在怀疑的地方打日志(就是把数据写到文件里),具体这个日志怎么写清楚,就要具体看你的代码了,然后别嫌麻烦的自己读这些日志。

还有就是如果是windows系统的话:
在"my computer"(我的电脑)->"manage(管理)"->"event viewer"->"application",双击相应error看看,不过不知道能不能关什么用。

如果是linux 命令 strings core.XXXX 看调用的栈。

不过,最好的可能还是开头说的打日志。

#7


写log文件

#8


引用 6 楼 rabbitlzx 的回复:

引用 7 楼 rabbitlzx 的回复:

谢谢你们,都说要写log日志,可我不会写,以前没有碰到这样的情况,我去查一下资料试一下。

#9


引用 5 楼 tan625747 的回复:
我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

没有任何错误信息么?如果没有就像6楼说的那样 开始-》运行-》eventvwr 然后看看有没有错误信息
如果没有任何错误信息 就得想办法调试了,在循环的前 后 都加断点,像渲染这种方法中不太好加断点调试 就可以尝试写log文件,将你认为可以的地方都做上标记,如:

 Log( "可疑处开始")

 //可疑代码

 Log( "可疑处结束")

你监视任务管理器 无异常,应该就不会是内存泄露了

#10


该回复于2009-11-25 17:36:54被版主删除

#11


引用 5 楼 tan625747 的回复:
我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

每次能再现的BUG相对来说是比较好处理的,把当时的关键状态写日志是比较好的选择。
先定位问题到函数级别,再深入到代码。

#12


引用 9 楼 rabbitlzx 的回复:
引用 5 楼 tan625747 的回复:
 我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

 没有任何错误信息么?如果没有就像6楼说的那样 开始-》运行-》eventvwr 然后看看有没有错误信息
 如果没有任何错误信息 就得想办法调试了,在循环的前 后 都加断点,像渲染这种方法中不太好加断点调试 就可以尝试写log文件,将你认为可以的地方都做上标记,如:

  Log( "可疑处开始")

  //可疑代码

  Log( "可疑处结束")

 你监视任务管理器 无异常,应该就不会是内存泄露了

先谢谢这位大哥!
没有任何错误信息就自己退出.我像6楼的那样做了,也没有发现错误信息.

写log日志的方法,我照大哥的方法去试一下呀。谢谢了。


#13


谢谢rabbitlzx 这么祥细和耐心的解答。

#14


引用 13 楼 tan625747 的回复:
谢谢rabbitlzx 这么祥细和耐心的解答。

不客气,互相帮助,互相提高

#15


把花边函数都//掉,编写测试函数看看。MessageBox();

或者你可以debug直接进去看。

#16


我知道怎么用log调试了,感觉log 很好用呀

#17


虽用会用log 调试,可还是不知道怎么样调试出导致程序挂掉的原因,和问题的代码。

#18


问题解决了
 FILE *HZK;
后面没有fclose(HZK);

总结经验,由于运行时间导致的问题,可能与指针与内存等有关!


在这里特别要rabbitlzx 大哥,让我学会了一种的调试方法

#1


没有死循环吗?
看样子是最后按键盘没反应了,是不是你的控制变量逻辑有问题,比如向上跑出了边界?

#2


跟踪试调一下,
运行之后,鼠标不动看是否还会挂,
再看变量的类型,范围是否出现异常

#3


死循环 或者 你的程序重绘出问题了。耗掉了资源。

#4


边界控制的问题?有可能是死循环呀。

#5


我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

#6


在怀疑的地方打日志(就是把数据写到文件里),具体这个日志怎么写清楚,就要具体看你的代码了,然后别嫌麻烦的自己读这些日志。

还有就是如果是windows系统的话:
在"my computer"(我的电脑)->"manage(管理)"->"event viewer"->"application",双击相应error看看,不过不知道能不能关什么用。

如果是linux 命令 strings core.XXXX 看调用的栈。

不过,最好的可能还是开头说的打日志。

#7


写log文件

#8


引用 6 楼 rabbitlzx 的回复:

引用 7 楼 rabbitlzx 的回复:

谢谢你们,都说要写log日志,可我不会写,以前没有碰到这样的情况,我去查一下资料试一下。

#9


引用 5 楼 tan625747 的回复:
我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

没有任何错误信息么?如果没有就像6楼说的那样 开始-》运行-》eventvwr 然后看看有没有错误信息
如果没有任何错误信息 就得想办法调试了,在循环的前 后 都加断点,像渲染这种方法中不太好加断点调试 就可以尝试写log文件,将你认为可以的地方都做上标记,如:

 Log( "可疑处开始")

 //可疑代码

 Log( "可疑处结束")

你监视任务管理器 无异常,应该就不会是内存泄露了

#10


该回复于2009-11-25 17:36:54被版主删除

#11


引用 5 楼 tan625747 的回复:
我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

每次能再现的BUG相对来说是比较好处理的,把当时的关键状态写日志是比较好的选择。
先定位问题到函数级别,再深入到代码。

#12


引用 9 楼 rabbitlzx 的回复:
引用 5 楼 tan625747 的回复:
 我的鼠标不动,不作任何气操作,运行到14300ms 的时候,就会挂掉,就是自动退出。

 没有任何错误信息么?如果没有就像6楼说的那样 开始-》运行-》eventvwr 然后看看有没有错误信息
 如果没有任何错误信息 就得想办法调试了,在循环的前 后 都加断点,像渲染这种方法中不太好加断点调试 就可以尝试写log文件,将你认为可以的地方都做上标记,如:

  Log( "可疑处开始")

  //可疑代码

  Log( "可疑处结束")

 你监视任务管理器 无异常,应该就不会是内存泄露了

先谢谢这位大哥!
没有任何错误信息就自己退出.我像6楼的那样做了,也没有发现错误信息.

写log日志的方法,我照大哥的方法去试一下呀。谢谢了。


#13


谢谢rabbitlzx 这么祥细和耐心的解答。

#14


引用 13 楼 tan625747 的回复:
谢谢rabbitlzx 这么祥细和耐心的解答。

不客气,互相帮助,互相提高

#15


把花边函数都//掉,编写测试函数看看。MessageBox();

或者你可以debug直接进去看。

#16


我知道怎么用log调试了,感觉log 很好用呀

#17


虽用会用log 调试,可还是不知道怎么样调试出导致程序挂掉的原因,和问题的代码。

#18


问题解决了
 FILE *HZK;
后面没有fclose(HZK);

总结经验,由于运行时间导致的问题,可能与指针与内存等有关!


在这里特别要rabbitlzx 大哥,让我学会了一种的调试方法