Debugging 如何使DIA释放其对pdb文件的锁定?
如何使DIA释放其对pdb文件的锁定Debugging 如何使DIA释放其对pdb文件的锁定?,debugging,pdb-files,dia-sdk,Debugging,Pdb Files,Dia Sdk,如何使DIA释放其对pdb文件的锁定 CoCreateInstance(__uuidof(DiaSource), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiaDataSource), (void**)&mp_DiaSource); mp_DiaSource->loadAndValidateDataFromPdb( (LPCOLESTR)p_wide_filename, &m_Sig, 0, m_
CoCreateInstance(__uuidof(DiaSource),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IDiaDataSource),
(void**)&mp_DiaSource);
mp_DiaSource->loadAndValidateDataFromPdb(
(LPCOLESTR)p_wide_filename, &m_Sig, 0, m_Age);
mp_DiaSource->openSession(&mp_Session);
// do stuff with mp_Session here
mp_Session->Release();
mp_DiaSource->Release();
我加载一个pdb并创建一个会话,如下所示,一切正常,我可以使用该会话从pdb获取数据
当我完成pdb后,我会释放会话和DiaSource,但DIA仍然锁定pdb文件,在我的应用程序退出之前,我无法在explorer中删除pdb文件。我如何告诉DIA释放pdb文件上的锁
CoCreateInstance(__uuidof(DiaSource),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IDiaDataSource),
(void**)&mp_DiaSource);
mp_DiaSource->loadAndValidateDataFromPdb(
(LPCOLESTR)p_wide_filename, &m_Sig, 0, m_Age);
mp_DiaSource->openSession(&mp_Session);
// do stuff with mp_Session here
mp_Session->Release();
mp_DiaSource->Release();
非常感谢
Stewart.至少对于
msdia90.dll
,文件句柄确实在Release()后没有关闭,一个可能的解决方法是调用loadDataFromIStream()
,并传递IStream
而不是加载pdb文件的路径,但是,我从未测试这是否真的有效。是的,你说得对。使用IStream
有助于避免锁定pdb文件。我自己使用了这个代码:IStream*pdbFileStream;shCreateStreamonfilex(“文件名”,STGM_FAILIFTHERE,GENERIC_READ,false,nullptr,&pdbFileStream)代码>