Загрузка отладочных символов без блокировки файлов

Я пытаюсь загрузить символы отладки для некоторых модулей, используя DbgHelp, не блокируя файлы PDB, чтобы наши клиенты могли их удалять, пока они еще загружаются нами.

Я пытался создать файл с FILE_SHARE_DELETE флаг, а затем вызов SymLoadModule64 с этим файлом, но безуспешно:

// Please ignore the missing error management
void Init()
{
// Initialize without loading the symbols
SymInitialize(::GetCurrentProcess(), FALSE);
...
// Call EnumerateSymbolsProc64 for every module
EnumerateLoadedModules64(::GetCurrentProcess(), EnumerateSymbolsProc64, NULL);
}

BOOL WINAPI WinDbgHelpImpl::EnumerateSymbolsProc64(PTSTR moduleName, DWORD64 moduleBase, ULONG moduleSize, PVOID userContext)
{
// Load the file with FILE_SHARE_DELETE flag
HANDLE fileHandle = CreateFileA(moduleName,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
0);

U64 res = s_winDbgHelpImpl.SymLoadModule64(::GetCurrentProcess(), fileHandle, NULL, NULL, moduleBase, moduleSize);
DWORD err = GetLastError();

return !(res == 0 && err != ERROR_SUCCESS);
}

Символы загружены правильно, но файлы по-прежнему заблокированы. Если я остановлю программу перед вызовом EnumerateLoadedModules64, я могу удалить PDB.

Знаете ли вы, можно ли загружать символы без блокировки файлов?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector