Debugging 如何使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_

如何使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();
我加载一个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)