Я реализую простой профилировщик 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 для работы на всех машинах.