首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

在EnterCriticalSection中出现Crash解决方法

2014-01-03 
在EnterCriticalSection中出现Crash现象如下:软件连续运行了大概2天多, 突然crash. 查看了下dump文件, 发

在EnterCriticalSection中出现Crash
现象如下:
软件连续运行了大概2天多, 突然crash. 查看了下dump文件, 发现crash的地方是EnterCriticalSection.
刚开始觉得可能是没有初始化或者delete或者leave之类的问题, 但是检查了下code发现并问题. 之后看了下dump中的变量内容, 感觉很奇怪:
一共有3个临界区变量, 内容几乎全部为0, 包括debug info的指针和所有计数. 出问题的临界区变量里, 除了LockSemaphore之外所有成员都是0.
现在看来, 只有这3个临界区变量的值不太正确, 其他的变量似乎没什么异常.

后来才想可能是踩内存了, 不过怎么就恰好把这3个家伙踩了, 附近的变量(内存中前后的内容都没问题)没问题, 想不通.

各位有没有什么相关经验, 分享一下, 多谢了在EnterCriticalSection中出现Crash解决方法
[解决办法]
帮你顶下,之前也碰到过类似的一次CRITICAL_SECTION crash,
后来排查是cs在某个逻辑情况下被delete了,如果你可以排除这个原因的话,
那基本上是内存越界被覆盖了。

[解决办法]



看起来问题不是表面上显示的这样,进程崩溃后创建dump,各个线程的调用栈都会被dump出来。而处于等待状态的线程很大可能会卡在EnterCriticalSection、WaitForSingleObject、Sleep等函数上,这是很正常的。依我看,卡在EnterCriticalSection上的这个线程并非是导致崩溃的线程。

ps,EnterCriticalSection是很鲁棒的函数,我认为只要满足一下几点,此函数根本不会出问题

1、Enter与Leave同步使用
2、CriticalSection结构被正确初始化
3、CriticalSection结构所处的内存有效
4、全部在一个进程范围内使用

这个函数的返回值是void,说明它的稳定性很强,正确使用出问题的概率几乎为0

热点排行