Я распечатываю некоторую отладочную информацию о callstack. Я могу получить имя функции достаточно легко, используя SymFromAddrПолучить функцию args from callstack address
void getFunctionInfo(FunctionInfo& funcInfo, uintptr_t address)
{
DWORD64 dwDisplacement; //not used
static char buffer[ sizeof(SYMBOL_INFO) + MAX_SYM_NAME ];
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO) buffer;
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYM_NAME;
if (SymFromAddr(m_process, address, &dwDisplacement, pSymbol))
{
strcpy(funcInfo.funcName, pSymbol->Name, MAX_SYM_NAME);
}
//TODO get function arguments
}
Однако я хочу, чтобы воспроизвести полную сигнатуру функции для того, чтобы устранить неоднозначность между переопределениями и в основном воспроизводит то, что показано в визуальном окне студии стеки вызовов. Я не могу найти вызов api для достижения этого.
Есть ли один?
Убедитесь, что вы не установили 'SYMOPT_UNDNAME' при вызове [SymSetOptions] (http://msdn.microsoft.com/en-us/library/ окна/настольные/ms681366.aspx). После того, как у вас есть украшенное имя символа, вы можете вызвать [UnDecorateSymbolName] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms681400.aspx), чтобы оно превратилось в то, что Visual Studio * Callstack * окна. – IInspectable
@Inspectable Спасибо - это именно то, что я хотел. –