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;
							 | 
						||
| 
								 | 
							
								};
							 |