- //EnterCriticalSection(&DbgHelpLock);
-
- QFile logFile(filename);
- logFile.open(QIODevice::Append);
- QTextStream logStream(&logFile);
-
- HANDLE hProcess = GetCurrentProcess();
- HANDLE hThread = GetCurrentThread();
- SymInitialize(hProcess, NULL, TRUE);
-
- DWORD64 dwDisplacement;
-
- ULONG64 buffer[(sizeof(SYMBOL_INFO) +
- MAX_SYM_NAME*sizeof(TCHAR) +
- sizeof(ULONG64) - 1) / sizeof(ULONG64)];
- PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
- pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
- pSymbol->MaxNameLen = MAX_SYM_NAME;
-
- IMAGEHLP_MODULE64 mod;
- mod.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);
-
- IMAGEHLP_STACK_FRAME ihsf;
- ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME));
-
- int i = 0;
- while(StackWalk64(MachineType, hProcess, hThread, &StackFrame, &Context, NULL, NULL, NULL, NULL)) {
- if(i == 128)
- break;
-
- loadHelpStackFrame(ihsf, StackFrame);
- if(StackFrame.AddrPC.Offset != 0) { // Valid frame.
-
- QString fileName("???");
- if(SymGetModuleInfo64(hProcess, ihsf.InstructionOffset, &mod)) {
- fileName = QString(mod.ImageName);
- int slashPos = fileName.lastIndexOf('\\');
- if(slashPos != -1)
- fileName = fileName.mid(slashPos + 1);
- }
- QString funcName;
- if(SymFromAddr(hProcess, ihsf.InstructionOffset, &dwDisplacement, pSymbol)) {
- funcName = QString(pSymbol->Name);
- } else {
- funcName = QString("0x%1").arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0'));
- }
- QStringList params;
- SymSetContext(hProcess, &ihsf, NULL);
- SymEnumSymbols(hProcess, 0, NULL, EnumSymbolsCB, (PVOID)¶ms);
-
- QString debugLine = QString("#%1 %2 0x%3 %4(%5)").arg(i, 3, 10)
- .arg(fileName, -20)
- .arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0'))
- .arg(funcName)
- .arg(params.join(", "));
- // qDebug() << qPrintable(debugLine);
- logStream << debugLine << '\n';
- i++;
- } else {
- break; // we're at the end.
+ //EnterCriticalSection(&DbgHelpLock);
+
+ QFile logFile(filename);
+ logFile.open(QIODevice::Append);
+ QTextStream logStream(&logFile);
+
+ HANDLE hProcess = GetCurrentProcess();
+ HANDLE hThread = GetCurrentThread();
+ SymInitialize(hProcess, NULL, TRUE);
+
+ DWORD64 dwDisplacement;
+
+ ULONG64 buffer[(sizeof(SYMBOL_INFO) +
+ MAX_SYM_NAME*sizeof(TCHAR) +
+ sizeof(ULONG64) - 1) / sizeof(ULONG64)];
+ PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
+ pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
+ pSymbol->MaxNameLen = MAX_SYM_NAME;
+
+ IMAGEHLP_MODULE64 mod;
+ mod.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);
+
+ IMAGEHLP_STACK_FRAME ihsf;
+ ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME));
+
+ int i = 0;
+ while (StackWalk64(MachineType, hProcess, hThread, &StackFrame, &Context, NULL, NULL, NULL, NULL)) {
+ if (i == 128)
+ break;
+
+ loadHelpStackFrame(ihsf, StackFrame);
+ if (StackFrame.AddrPC.Offset != 0) { // Valid frame.
+ QString fileName("???");
+ if (SymGetModuleInfo64(hProcess, ihsf.InstructionOffset, &mod)) {
+ fileName = QString(mod.ImageName);
+ int slashPos = fileName.lastIndexOf('\\');
+ if (slashPos != -1)
+ fileName = fileName.mid(slashPos + 1);
+ }
+ QString funcName;
+ if (SymFromAddr(hProcess, ihsf.InstructionOffset, &dwDisplacement, pSymbol)) {
+ funcName = QString(pSymbol->Name);
+ }
+ else {
+ funcName = QString("0x%1").arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0'));
+ }
+ QStringList params;
+ SymSetContext(hProcess, &ihsf, NULL);
+ SymEnumSymbols(hProcess, 0, NULL, EnumSymbolsCB, (PVOID)¶ms);
+
+ QString debugLine = QString("#%1 %2 0x%3 %4(%5)").arg(i, 3, 10)
+ .arg(fileName, -20)
+ .arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0'))
+ .arg(funcName)
+ .arg(params.join(", "));
+ // qDebug() << qPrintable(debugLine);
+ logStream << debugLine << '\n';
+ i++;
+ }
+ else {
+ break; // we're at the end.
+ }