Follow project coding style. Issue #2192.

This commit is contained in:
Nick Tiskov 2014-11-27 21:56:24 +03:00
commit ba9f6a3531
2 changed files with 206 additions and 195 deletions

View file

@ -24,7 +24,8 @@
#include <QTextStream> #include <QTextStream>
namespace straceWin{ namespace straceWin
{
void loadHelpStackFrame(IMAGEHLP_STACK_FRAME&, const STACKFRAME64&); void loadHelpStackFrame(IMAGEHLP_STACK_FRAME&, const STACKFRAME64&);
BOOL CALLBACK EnumSymbolsCB(PSYMBOL_INFO, ULONG, PVOID); BOOL CALLBACK EnumSymbolsCB(PSYMBOL_INFO, ULONG, PVOID);
BOOL CALLBACK EnumModulesCB(LPCSTR, DWORD64, PVOID); BOOL CALLBACK EnumModulesCB(LPCSTR, DWORD64, PVOID);
@ -32,28 +33,31 @@ namespace straceWin{
struct EnumModulesContext; struct EnumModulesContext;
} }
void straceWin::loadHelpStackFrame(IMAGEHLP_STACK_FRAME &ihsf, const STACKFRAME64 &stackFrame) { void straceWin::loadHelpStackFrame(IMAGEHLP_STACK_FRAME& ihsf, const STACKFRAME64& stackFrame)
{
ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME)); ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME));
ihsf.InstructionOffset = stackFrame.AddrPC.Offset; ihsf.InstructionOffset = stackFrame.AddrPC.Offset;
ihsf.FrameOffset = stackFrame.AddrFrame.Offset; ihsf.FrameOffset = stackFrame.AddrFrame.Offset;
} }
BOOL CALLBACK straceWin::EnumSymbolsCB(PSYMBOL_INFO symInfo, ULONG size, PVOID user) { BOOL CALLBACK straceWin::EnumSymbolsCB(PSYMBOL_INFO symInfo, ULONG size, PVOID user)
{
QStringList* params = (QStringList*)user; QStringList* params = (QStringList*)user;
if(symInfo->Flags & SYMFLAG_PARAMETER) { if (symInfo->Flags & SYMFLAG_PARAMETER)
params->append(symInfo->Name); params->append(symInfo->Name);
}
return TRUE; return TRUE;
} }
struct straceWin::EnumModulesContext { struct straceWin::EnumModulesContext
{
HANDLE hProcess; HANDLE hProcess;
QTextStream& stream; QTextStream& stream;
EnumModulesContext(HANDLE hProcess, QTextStream& stream): hProcess(hProcess), stream(stream) {} EnumModulesContext(HANDLE hProcess, QTextStream& stream): hProcess(hProcess), stream(stream) {}
}; };
BOOL CALLBACK straceWin::EnumModulesCB(LPCSTR ModuleName, DWORD64 BaseOfDll, PVOID UserContext) { BOOL CALLBACK straceWin::EnumModulesCB(LPCSTR ModuleName, DWORD64 BaseOfDll, PVOID UserContext)
{
IMAGEHLP_MODULE64 mod; IMAGEHLP_MODULE64 mod;
EnumModulesContext* context = (EnumModulesContext*)UserContext; EnumModulesContext* context = (EnumModulesContext*)UserContext;
mod.SizeOfStruct = sizeof(IMAGEHLP_MODULE64); mod.SizeOfStruct = sizeof(IMAGEHLP_MODULE64);
@ -86,7 +90,8 @@ BOOL CALLBACK straceWin::EnumModulesCB(LPCSTR ModuleName, DWORD64 BaseOfDll, PVO
#pragma warning(push) #pragma warning(push)
#pragma warning(disable : 4748) #pragma warning(disable : 4748)
#endif #endif
const QString straceWin::getBacktrace() { const QString straceWin::getBacktrace()
{
DWORD MachineType; DWORD MachineType;
CONTEXT Context; CONTEXT Context;
STACKFRAME64 StackFrame; STACKFRAME64 StackFrame;
@ -173,6 +178,7 @@ const QString straceWin::getBacktrace() {
ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME)); ZeroMemory(&ihsf, sizeof(IMAGEHLP_STACK_FRAME));
int i = 0; int i = 0;
while(StackWalk64(MachineType, hProcess, hThread, &StackFrame, &Context, NULL, NULL, NULL, NULL)) { while(StackWalk64(MachineType, hProcess, hThread, &StackFrame, &Context, NULL, NULL, NULL, NULL)) {
if(i == 128) if(i == 128)
break; break;
@ -188,11 +194,10 @@ const QString straceWin::getBacktrace() {
fileName = fileName.mid(slashPos + 1); fileName = fileName.mid(slashPos + 1);
} }
QString funcName; QString funcName;
if(SymFromAddr(hProcess, ihsf.InstructionOffset, &dwDisplacement, pSymbol)) { if(SymFromAddr(hProcess, ihsf.InstructionOffset, &dwDisplacement, pSymbol))
funcName = QString(pSymbol->Name); funcName = QString(pSymbol->Name);
} else { else
funcName = QString("0x%1").arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0')); funcName = QString("0x%1").arg(ihsf.InstructionOffset, 8, 16, QLatin1Char('0'));
}
QStringList params; QStringList params;
SymSetContext(hProcess, &ihsf, NULL); SymSetContext(hProcess, &ihsf, NULL);
SymEnumSymbols(hProcess, 0, NULL, EnumSymbolsCB, (PVOID)&params); SymEnumSymbols(hProcess, 0, NULL, EnumSymbolsCB, (PVOID)&params);
@ -206,7 +211,8 @@ const QString straceWin::getBacktrace() {
.arg(params.join(", ")); .arg(params.join(", "));
logStream << debugLine << '\n'; logStream << debugLine << '\n';
i++; i++;
} else { }
else {
break; // we're at the end. break; // we're at the end.
} }
} }

View file

@ -7,17 +7,22 @@
#include "libtorrent/version.hpp" #include "libtorrent/version.hpp"
#include "ui_stacktrace_win_dlg.h" #include "ui_stacktrace_win_dlg.h"
class StraceDlg : public QDialog, private Ui::errorDialog { class StraceDlg: public QDialog, private Ui::errorDialog
{
Q_OBJECT Q_OBJECT
public: public:
StraceDlg(QWidget *parent = 0): QDialog(parent) { StraceDlg(QWidget* parent = 0): QDialog(parent)
{
setupUi(this); setupUi(this);
} }
~StraceDlg() {} ~StraceDlg()
{
}
void setStacktraceString(const QString& trace) { void setStacktraceString(const QString& trace)
{
QString htmlStr; QString htmlStr;
QTextStream outStream(&htmlStr); QTextStream outStream(&htmlStr);
outStream << "<p align=center><b><font size=7 color=red>" << outStream << "<p align=center><b><font size=7 color=red>" <<