mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-19 21:03:30 -07:00
Follow project coding style. Issue #2192.
This commit is contained in:
parent
ed829bc93a
commit
ba9f6a3531
2 changed files with 206 additions and 195 deletions
|
@ -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)¶ms);
|
SymEnumSymbols(hProcess, 0, NULL, EnumSymbolsCB, (PVOID)¶ms);
|
||||||
|
@ -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.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>" <<
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue