1、现象
最近项目中调出一个bug,某些时候程序会卡死不动,用windbg进行加载后用 ~*kb 命令列出所有的线程栈调用,发现有多个线程调用 WaitForMultipleObjects 在等待同一个内核对象:
输入 !handle cc f 命令列出该内核对象的详细信息:
发现是是一个Mutex对象,对象名是 Mutex_DebugMsg2 ,查找代码知道这个Mutex是用写log时锁定文件写入用的。代码如下:
BOOL CDebugMsg::WriteLogA(LPSTR pszLog)
{
#ifdef _WRITEDEBUGMSGLOG
BOOL bRet = FALSE;
if (WaitForSingleObject(m_hMutex, INFINITE) != WAIT_OBJECT_0)
{
return bRet;
}
FILE* fp = _tfopen(m_ptszLogPath, _T("a+"));
if (fp)
{
TCHAR ptszTime[16] = {0};
char pszWriteMsg[MAXDEBUGMSGCHARNUM] = {0};
GetTimeString(ptszTime);
USES_CONVERSION;
_snprintf(pszWrit
订阅专栏 解锁全文
2747

被折叠的 条评论
为什么被折叠?



