VS2010 MFC测试程序在Debug模式下自动退出,因为_log重复生成pid导致的。
现象为在F5 Debug的时候,没有出错就自动退出,因为是MFC对话框模式,不应该自动退出,肯定是那里引起的异常。
经过检查发现退出的时候有内存泄漏,而仔细检查了程序,所有的内存都是预先分配好的,而且动态的内存也释放的没有问题。
通过获取内存的第多少次分配的地方增加端点。
...
#include
...
CoriddlltestApp::CoriddlltestApp()
{
// 支持重新启动管理器
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
_CrtSetBreakAlloc(550);
}
550是指程序第多少次分配内存,这个内存没有释放泄漏了。这个值在Debug退出的时候会在输出框中显示出来。
通过断点看到在_log()日志输出函数中,由于
LocalConfDef* find_local_conf()
{
DWORD tid;
LocalConfDef* p;
tid = GetCurrentThreadId();
p = local_conf_list;
while (p)
{
if (p->tid == tid) break;
p = p->next;
}
return p;
}
通过对pid的比较生成新的log文件配置信息,因为程序中大量的线程生成释放。导致这个local_list增加很快,最后崩溃。
这个文件在日后有大量线程操作的模块中要注释掉相关pid操作。
分享: