首页
社区
课程
招聘
[原创]Windbg跟踪临界区的bug
发表于: 2015-10-23 20:56 10724

[原创]Windbg跟踪临界区的bug

2015-10-23 20:56
10724

最近跟踪了一个程序的界面卡死问题,用windbg载入dump文件后打印出函数调用堆栈后,一眼可以看出是临界区死锁了。

0:000:x86> kb
ChildEBP RetAddr  Args to Child              
0032dd0c 779ed993 00000710 00000000 00000000 ntdll_779b0000!NtWaitForSingleObject+0x15
0032dd70 779ed877 00000000 00000000 024023f0 ntdll_779b0000!RtlpWaitOnCriticalSection+0x13e
0032dd98 58a2fac3 02404c50 856fd57e 024023f0 ntdll_779b0000!RtlEnterCriticalSection+0x150
0032dffc 58a0d4d7 856fea8a 00000000 001c41a0 SogouSoftware_589d0000!CDownloadListUI::UpdateDownloadListUI+0x43
0:000:x86> !cs 02404c50
-----------------------------------------
Critical section   = 0x0000000002404c50 (+0x2404C50)
DebugInfo          = 0x0000000000611e08
LOCKED
LockCount          = 0xFFFFFFFF
WaiterWoken        = Yes
OwningThread       = 0x0000000000000710
RecursionCount     = 0x1A38
LockSemaphore      = 0x2433B08
SpinCount          = 0x0000000000000000
0:000:x86> ~~[710]
                 ^ Illegal thread error in '~~[710]'

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 3
支持
分享
最新回复 (7)
雪    币: 204
活跃值: (911)
能力值: (RANK:1324 )
在线值:
发帖
回帖
粉丝
2
感谢楼主分享
2015-10-23 22:30
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼主分享技术贴
2015-10-24 09:31
0
雪    币: 69
活跃值: (71)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
膜拜大神。
顺便想知道下m_vctLock是什么。
2015-10-24 19:55
0
雪    币: 659
活跃值: (499)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
private:
	CComCriticalSection m_vctLock;


class CComCriticalSection
{
public:
	CComCriticalSection() throw()
	{
		memset(&m_sec, 0, sizeof(CRITICAL_SECTION));
	}
	~CComCriticalSection()
	{
	}
	HRESULT Lock() throw()
	{
		EnterCriticalSection(&m_sec);
		return S_OK;
	}
	HRESULT Unlock() throw()
	{
		LeaveCriticalSection(&m_sec);
		return S_OK;
	}
	HRESULT Init() throw()
	{
		HRESULT hRes = S_OK;

		if (!InitializeCriticalSectionAndSpinCount(&m_sec, 0))
		{
			hRes = HRESULT_FROM_WIN32(GetLastError());
		}

		return hRes;
	}

	HRESULT Term() throw()
	{
		DeleteCriticalSection(&m_sec);
		return S_OK;
	}
	CRITICAL_SECTION m_sec;
};

ATL一个以临界区的作为锁的一个简单的封装。
2015-10-25 11:52
0
雪    币: 5
活跃值: (311)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
建议对CComCriticalSection再封装一个包装类,其构造函数调用CComCriticalSection.lock,析构调用CComCriticalSection.unlock.使用时只需要实例化包装类,方便一些
2015-11-2 08:11
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
搞手,其构造函数调用CComCriticalSection.lock,析构调用CComCriticalSection.unlock
2015-11-4 14:35
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
觉得有可能是符号匹配有问题
2015-11-23 12:46
0
游客
登录 | 注册 方可回帖
返回
//