forked from qt-creator/qt-creator
72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "windbgeventcallback.h"
|
|
|
|
#include <QObject>
|
|
#include <QVector>
|
|
|
|
#define DBGHELP_TRANSLATE_TCHAR
|
|
#include <Dbghelp.h>
|
|
|
|
class WinDbgThread;
|
|
|
|
class Debugger : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Debugger(QObject* parent = 0);
|
|
~Debugger();
|
|
|
|
void openProcess(const QString& filename);
|
|
void closeProcess();
|
|
void breakAtCurrentPosition();
|
|
void continueProcess();
|
|
|
|
struct StackFrame
|
|
{
|
|
QString symbol;
|
|
QString filename;
|
|
uint line;
|
|
};
|
|
|
|
typedef QVector<StackFrame> StackTrace;
|
|
StackTrace stackTrace() { return m_currentStackTrace; }
|
|
|
|
signals:
|
|
void debugOutput(const QString&);
|
|
void debuggeePaused();
|
|
|
|
protected:
|
|
void timerEvent(QTimerEvent*);
|
|
|
|
private:
|
|
void handleDebugEvent();
|
|
void handleCreateProcessEvent(DEBUG_EVENT* e);
|
|
void handleExceptionEvent(DEBUG_EVENT* e);
|
|
void handleOutputDebugStringEvent(DEBUG_EVENT* e);
|
|
|
|
private:
|
|
HANDLE m_hDebuggeeProcess;
|
|
HANDLE m_hDebuggeeThread;
|
|
HANDLE m_hDebuggeeImage;
|
|
StackTrace m_currentStackTrace;
|
|
//DWORD64 m_dwModuleBaseAddress;
|
|
|
|
int m_watchTimer;
|
|
IDebugClient5* m_pDebugClient;
|
|
IDebugControl4* m_pDebugControl;
|
|
IDebugSystemObjects4* m_pDebugSystemObjects;
|
|
IDebugSymbols3* m_pDebugSymbols;
|
|
IDebugRegisters2* m_pDebugRegisters;
|
|
WinDbgEventCallback m_callbackEvent;
|
|
|
|
//struct ThreadInfo
|
|
//{
|
|
// ULONG64 handle, dataOffset, startOffset;
|
|
//};
|
|
|
|
//QVector<ThreadInfo> m_threadlist;
|
|
|
|
friend class WinDbgEventCallback;
|
|
};
|