求助!程序出现死循环 一个程序,在特定的情况下会出现死循环,怎么才能在程序死循环的时候得到此时的调用栈?(这个程序是debug版的)自己有源代码,代码量很大,调试运行的时候不一定能出现死循环的情况。求教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以试试dump一个文件 用WinDbg调试 重现错误现场 网上有minidump这个类 前提还是 你要知道检测死循环发生了在dump文件 你怎么判断出是死循环的?状态是什么?CPU占有率高吗?界面有响应吗?这些现象能缩小问题范围。即使真的是死循环,也不是没办法检查,通过VS启动程序,在你认为出问题的时候,直接点击VS的暂停运行按钮,可能VS会提示没有代码,没有关系,这说明中断的地方在API里面,此时从调用栈窗口查看你的代码运行到哪了,简单分析一下,剩下的事情就是单步跟踪。 如果是VC6,暂停调试,在Debug选项下面看Thread,一个一个线程看,看有没有出现while,或者是阻塞模式的函数的调用. 磨刀不误砍柴工,加log吧。如果你的bug很快能复现,可以用分治的办法(就是类似二分查找)来加log排除。 to 13#, 16#这个方法也可以,不过程序是独立运行的,因为一些不便的原因,不能在vs中。 今天下午CSDN升级,现在才有空上。 to 17#说实话第一次听说调试日志。程序的逻辑部分是单线程,应该不是多线程的问题。to 18#代码很多,log方法比较慢。程序dump到了一个文件,windbg分析到的结果不是很有效,看不出问题出在哪里,dump到其他文件再做分析。to all谢谢大家热心解答。 程序有显示每秒更新的tick,tick不动了,程序还在运行,所以是死循环。 本人看法,本人觉得调试方法要灵活多变:我主要用的方法是:1,断点调试法,通过设置断点找到具体出错的地方。2,用MessageBox();这个函数来调试,因为这个函数可以截住进程,有时我发现这个方法挺有效,能方便程序员找到程序出错的地方。 添加一个log类用来保存信息,所有有可能出错的地方都向log 写进去,当然对于楼主那么大的程序,似乎不好办,写log的好处就是可以在用户使用的时候自动记录错误,有必要可以用seh捕捉异常,并上传log,这要看你程序是怎么架构的 出现死循环的时候dump现场,然后用windbg分析,问题已经解决。再次感谢大家热心解答! 【口水贴】MFC已死,各位打算学MFC的新人回头是岸 定义全局对象,是不是存贮在静态存储区呢?与静态变量一样? 请问:在VC中,如何使某个工具栏在初始化时不可用?? 哪位老大有国际象棋算法 谢谢 [email protected] 请问该如何找到这种错误? 如何在程序一启动的时候就将“工具栏”至于左边?????? IP欺骗怎么实现? 奇怪的问题,急!高分求助! 关于类型转换 MFC在socket编程,在unicode下收到数据是乱码,怎么解决 求助,我想在程序运行过程中使编辑框不能输入要用哪个函数? 在桌面下所有线程禁用键盘上某个按键比如win键
说实话第一次听说调试日志。程序的逻辑部分是单线程,应该不是多线程的问题。to 18#
代码很多,log方法比较慢。
程序dump到了一个文件,windbg分析到的结果不是很有效,看不出问题出在哪里,dump到其他文件再做分析。to all
谢谢大家热心解答。
程序有显示每秒更新的tick,tick不动了,程序还在运行,所以是死循环。
我主要用的方法是:
1,断点调试法,通过设置断点找到具体出错的地方。
2,用MessageBox();这个函数来调试,因为这个函数可以截住进程,有时我发现这个方法挺有效,能方便程序员找到程序出错的地方。
再次感谢大家热心解答!