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

FreeLibrary函数卡死,请问大牛指点

2013-09-06 
FreeLibrary函数卡死,请教大牛指点调试公司的代码,一个动态库导出一个类,在卸载动态库的时候调用FreeLibra

FreeLibrary函数卡死,请教大牛指点
调试公司的代码,一个动态库导出一个类,在卸载动态库的时候调用FreeLibrary,FreeLibrary卡死在里面。
下面详细描述一下场景和我的一些看法:
1、动态库是用MFC生成的,也就是说DllMain是被封装起来的,我不会改其中的加载/卸载函数。
2、在动态库卸载前,我已确认将导出类对象删除,及时不删除,应该出现崩溃现象才对。

现在没有什么好的思路,请各位指点一下,给个方向也好。
[解决办法]
是不是线程死锁了
[解决办法]
创建个新工程,只加载dll,然后释放,看看情况,调用dll中的类方法再释放看看情况。而且FreeLibrary应该都不用主动调用的吧
[解决办法]

引用:
我用windbg 分析dump文件,没有看到多个线程争夺锁的情况,有可能是某个线程锁没释放就把线程干掉了的情况,但是不好验证。给个方法。


如果你确实正确的用Windbg扫描,没有死锁。
有可能是Dll释放时清理资源出现死循环,到不一定是锁住
你最好看看windbg释放线程的堆栈。
[解决办法]
http://blog.csdn.net/breaksoftware/article/details/8159088
[解决办法]

//////////////////////////////////////////////////////////////////////////
//
//Entry-Point Function: the first code to execute, also the last code.
//
BOOL APIENTRY DllMain(HMODULE hModule, 
  DWORD  ul_reason_for_call, 
  LPVOID lpReserved
  )
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
//TODO
return TRUE;

case DLL_PROCESS_DETACH:
//TODO
return TRUE;

case DLL_THREAD_ATTACH:
//TODO
return TRUE;

case DLL_THREAD_DETACH:
//TODO
return TRUE;

default:
return TRUE;
}
}

热点排行