Будут ли файлы pdb, созданные на одной машине Windows, работать на другой машине Windows - PullRequest
0 голосов
/ 04 ноября 2019

Я реализую простой профилировщик c ++, чтобы найти время выполнения функции. Я использую Visual Studio 2017 для создания своего приложения. Я установил ловушки _penter & _pexit и пытался получить имя функции по адресу при вызове перехваченных методов.

Я могу получить имя функции, когда запускаю приложение на том же компьютере, на котором я создаю приложение. Но это не работает, когда я копирую и запускаю его на другом компьютере. Когда я проверял ошибку GetLastError (), она показала ошибку «Попытка доступа к неверному адресу». Я потратил некоторое время и обнаружил, что это происходит из-за файла pdb. Если я создаю приложение на другом компьютере, оно работает.

Ниже приведен код, который я использую для получения имени функции по адресу

    TCHAR  buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)] ;
    memset(&buffer,0,sizeof(buffer));
    PSYMBOL_INFO    pSymbolInfo = ( PSYMBOL_INFO)buffer;
    pSymbolInfo->SizeOfStruct = sizeof(SYMBOL_INFO) ;
    pSymbolInfo->MaxNameLen = MAX_SYM_NAME;
    BOOL bResult = SymFromAddr(GetCurrentProcess(), (DWORD64)pa, &symDisplacement, pSymbolInfo);

Пожалуйста, помогите мне разобратьсяпроблема в вышеуказанном случае. Будет ли файл pdb, созданный на одной машине, не поддерживаться / работать на другой машине? Если нет, то как мне создать приложение с файлом pdb для работы на всех машинах.

...