From ced7e3a0fc63e9373e382b29253501eba9432259 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Tue, 13 Jul 2010 11:16:17 +0200 Subject: [PATCH] Added profiles for manual tests, cleaned up. --- tests/manual/cdbdebugger/cdbdebugger.pro | 20 -- tests/manual/cdbdebugger/debugger.cpp | 305 ------------------ tests/manual/cdbdebugger/debugger.h | 71 ---- tests/manual/cdbdebugger/main.cpp | 11 - tests/manual/cdbdebugger/mainwindow.cpp | 90 ------ tests/manual/cdbdebugger/mainwindow.h | 26 -- tests/manual/cdbdebugger/mainwindow.ui | 174 ---------- tests/manual/cdbdebugger/outputcallback.cpp | 61 ---- tests/manual/cdbdebugger/outputcallback.h | 30 -- .../cdbdebugger/windbgeventcallback.cpp | 186 ----------- .../manual/cdbdebugger/windbgeventcallback.h | 126 -------- tests/manual/cdbdebugger/windbgthread.cpp | 150 --------- tests/manual/cdbdebugger/windbgthread.h | 49 --- tests/manual/cplusplus-dump/main.cpp | 13 +- tests/manual/fakevim/fakevim.pro | 1 + tests/manual/gdbdebugger/gdbdebugger.pro | 6 + tests/manual/manual.pro | 28 ++ 17 files changed, 46 insertions(+), 1301 deletions(-) delete mode 100644 tests/manual/cdbdebugger/cdbdebugger.pro delete mode 100644 tests/manual/cdbdebugger/debugger.cpp delete mode 100644 tests/manual/cdbdebugger/debugger.h delete mode 100644 tests/manual/cdbdebugger/main.cpp delete mode 100644 tests/manual/cdbdebugger/mainwindow.cpp delete mode 100644 tests/manual/cdbdebugger/mainwindow.h delete mode 100644 tests/manual/cdbdebugger/mainwindow.ui delete mode 100644 tests/manual/cdbdebugger/outputcallback.cpp delete mode 100644 tests/manual/cdbdebugger/outputcallback.h delete mode 100644 tests/manual/cdbdebugger/windbgeventcallback.cpp delete mode 100644 tests/manual/cdbdebugger/windbgeventcallback.h delete mode 100644 tests/manual/cdbdebugger/windbgthread.cpp delete mode 100644 tests/manual/cdbdebugger/windbgthread.h create mode 100644 tests/manual/gdbdebugger/gdbdebugger.pro create mode 100644 tests/manual/manual.pro diff --git a/tests/manual/cdbdebugger/cdbdebugger.pro b/tests/manual/cdbdebugger/cdbdebugger.pro deleted file mode 100644 index 855b775c2e0..00000000000 --- a/tests/manual/cdbdebugger/cdbdebugger.pro +++ /dev/null @@ -1,20 +0,0 @@ -TEMPLATE = app -TARGET = -DEPENDPATH += . -INCLUDEPATH += . - -DEFINES += - -LIBS += Dbghelp.lib dbgeng.lib - -HEADERS += mainwindow.h \ - debugger.h \ - outputcallback.h \ - windbgeventcallback.h \ - windbgthread.h -FORMS += mainwindow.ui -SOURCES += main.cpp mainwindow.cpp \ - debugger.cpp \ - outputcallback.cpp \ - windbgeventcallback.cpp \ - windbgthread.cpp diff --git a/tests/manual/cdbdebugger/debugger.cpp b/tests/manual/cdbdebugger/debugger.cpp deleted file mode 100644 index 67e0c53934d..00000000000 --- a/tests/manual/cdbdebugger/debugger.cpp +++ /dev/null @@ -1,305 +0,0 @@ -#include "debugger.h" -#include "windbgthread.h" -#include "outputcallback.h" -#include "windbgeventcallback.h" - -#include <QFileInfo> -#include <QTimerEvent> -#include <QDebug> - -Debugger::Debugger(QObject* parent) -: QObject(parent), - m_callbackEvent(this), - m_watchTimer(-1), - m_hDebuggeeProcess(0) -{ - HRESULT hr; - hr = DebugCreate( __uuidof(IDebugClient5), reinterpret_cast<void**>(&m_pDebugClient)); - if (FAILED(hr)) m_pDebugClient = 0; - hr = DebugCreate( __uuidof(IDebugControl4), reinterpret_cast<void**>(&m_pDebugControl)); - if (FAILED(hr)) m_pDebugControl = 0; - hr = DebugCreate( __uuidof(IDebugSystemObjects4), reinterpret_cast<void**>(&m_pDebugSystemObjects)); - if (FAILED(hr)) m_pDebugSystemObjects = 0; - hr = DebugCreate( __uuidof(IDebugSymbols3), reinterpret_cast<void**>(&m_pDebugSymbols)); - if (FAILED(hr)) m_pDebugSymbols = 0; - hr = DebugCreate( __uuidof(IDebugRegisters2), reinterpret_cast<void**>(&m_pDebugRegisters)); - if (FAILED(hr)) m_pDebugRegisters = 0; - - m_pDebugClient->SetOutputCallbacks(&g_outputCallbacks); - m_pDebugClient->SetEventCallbacks(&m_callbackEvent); -} - -Debugger::~Debugger() -{ - killTimer(m_watchTimer); - if (m_pDebugClient) - m_pDebugClient->Release(); - if (m_pDebugControl) - m_pDebugControl->Release(); - if (m_pDebugSystemObjects) - m_pDebugSystemObjects->Release(); - if (m_pDebugSymbols) - m_pDebugSymbols->Release(); - if (m_pDebugRegisters) - m_pDebugRegisters->Release(); -} - -void Debugger::timerEvent(QTimerEvent* te) -{ - if (te->timerId() != m_watchTimer) - return; - - HRESULT hr; - hr = m_pDebugControl->WaitForEvent(0, 1); - switch (hr) { - case S_OK: - //qDebug() << "S_OK"; - //hr = m_pDebugControl->SetExecutionStatus(DEBUG_STATUS_BREAK); - killTimer(m_watchTimer); - m_watchTimer = -1; - handleDebugEvent(); - break; - case S_FALSE: - //qDebug() << "S_FALSE"; - break; - case E_PENDING: - qDebug() << "S_PENDING"; - break; - case E_UNEXPECTED: - killTimer(m_watchTimer); - m_watchTimer = -1; - break; - case E_FAIL: - qDebug() << "E_FAIL"; - break; - default: - qDebug() << "asser welljuh"; - } -} - -void Debugger::openProcess(const QString& filename) -{ - DEBUG_CREATE_PROCESS_OPTIONS dbgopts; - memset(&dbgopts, 0, sizeof(dbgopts)); - dbgopts.CreateFlags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; - - HRESULT hr; - - QFileInfo fi(filename); - m_pDebugSymbols->AppendImagePathWide(fi.absolutePath().replace('/','\\').utf16()); - //m_pDebugSymbols->AppendSymbolPathWide(fi.absolutePath().replace('/','\\').utf16()); - //m_pDebugSymbols->AppendSymbolPathWide(L"D:\\dev\\qt\\4.4.3\\lib"); - m_pDebugSymbols->SetSymbolOptions(SYMOPT_CASE_INSENSITIVE | SYMOPT_UNDNAME | SYMOPT_DEBUG | SYMOPT_LOAD_LINES | SYMOPT_OMAP_FIND_NEAREST | SYMOPT_AUTO_PUBLICS); - //m_pDebugSymbols->AddSymbolOptions(SYMOPT_CASE_INSENSITIVE | SYMOPT_UNDNAME | SYMOPT_DEFERRED_LOADS | SYMOPT_DEBUG | SYMOPT_LOAD_LINES | SYMOPT_OMAP_FIND_NEAREST | SYMOPT_AUTO_PUBLICS | SYMOPT_NO_IMAGE_SEARCH); - - hr = m_pDebugClient->CreateProcess2Wide(NULL, - const_cast<PWSTR>(filename.utf16()), - &dbgopts, - sizeof(dbgopts), - NULL, // TODO: think about the initial directory - NULL); // TODO: think about setting the environment - if (FAILED(hr)) { - qWarning("CreateProcess2Wide failed"); - return; - } - - m_watchTimer = startTimer(0); -} - -void Debugger::closeProcess() -{ - m_pDebugClient->TerminateCurrentProcess(); -} - -void Debugger::breakAtCurrentPosition() -{ - if (!m_hDebuggeeProcess) - return; - if (!DebugBreakProcess(m_hDebuggeeProcess)) - qWarning("DebugBreakProcess failed."); -} - -void Debugger::continueProcess() -{ - m_watchTimer = startTimer(0); -} - -void Debugger::handleDebugEvent() -{ - HRESULT hr; - - ULONG numberOfThreads; - hr = m_pDebugSystemObjects->GetNumberThreads(&numberOfThreads); - const ULONG maxThreadIds = 200; - ULONG threadIds[maxThreadIds]; - ULONG biggestThreadId = qMin(maxThreadIds, numberOfThreads - 1); - hr = m_pDebugSystemObjects->GetThreadIdsByIndex(0, biggestThreadId, threadIds, 0); - for (ULONG threadId = 0; threadId <= biggestThreadId; ++threadId) { - qDebug() << "dumping stack for thread" << threadId; - - m_pDebugSystemObjects->SetCurrentThreadId(threadId); - - ULONG64 frameOffset, instructionOffset, stackOffset; - if (FAILED(m_pDebugRegisters->GetFrameOffset2(DEBUG_REGSRC_DEBUGGEE, &frameOffset)) || - FAILED(m_pDebugRegisters->GetInstructionOffset2(DEBUG_REGSRC_DEBUGGEE, &instructionOffset)) || - FAILED(m_pDebugRegisters->GetStackOffset2(DEBUG_REGSRC_DEBUGGEE, &stackOffset))) - { - frameOffset = instructionOffset = stackOffset = 0; - } - //frameOffset = instructionOffset = stackOffset = 0; - - const ULONG numFrames = 100; - ULONG numFramesFilled = 0; - DEBUG_STACK_FRAME frames[numFrames]; - hr = m_pDebugControl->GetStackTrace(frameOffset, stackOffset, instructionOffset, frames, numFrames, &numFramesFilled); - if (FAILED(hr)) - qDebug() << "GetStackTrace failed"; - - const size_t buflen = 1024; - WCHAR wszBuf[buflen]; - for (ULONG i=0; i < numFramesFilled; ++i) { - m_pDebugSymbols->GetNameByOffsetWide(frames[i].InstructionOffset, wszBuf, buflen, 0, 0); - qDebug() << QString::fromUtf16(wszBuf); - } - - //m_pDebugSymbols->GetImagePathWide(wszBuf, buflen, 0); - //qDebug() << "ImagePath" << QString::fromUtf16(wszBuf); - //m_pDebugSymbols->GetSymbolPathWide(wszBuf, buflen, 0); - //qDebug() << "SymbolPath" << QString::fromUtf16(wszBuf); - - //m_pDebugControl->OutputStackTrace(DEBUG_OUTCTL_THIS_CLIENT, 0, 2, DEBUG_STACK_FRAME_ADDRESSES | DEBUG_STACK_COLUMN_NAMES | DEBUG_STACK_FRAME_NUMBERS); - //m_pDebugControl->OutputStackTrace(DEBUG_OUTCTL_THIS_CLIENT, frames, numFramesFilled, DEBUG_STACK_SOURCE_LINE); - } -} - -void Debugger::handleCreateProcessEvent(DEBUG_EVENT* e) -{ - //qDebug() << "CREATE_PROCESS_DEBUG_EVENT"; - //m_hDebuggeeProcess = e->u.CreateProcessInfo.hProcess; - //m_hDebuggeeThread = e->u.CreateProcessInfo.hThread; - //m_hDebuggeeImage = e->u.CreateProcessInfo.hFile; - - //QFileInfo fi(m_pDbgProcess->processFileName()); - //BOOL bSuccess; - //bSuccess = SymInitialize(m_hDebuggeeProcess, fi.absolutePath().utf16(), FALSE); - //if (!bSuccess) - // qWarning("SymInitialize failed"); - //else { - // SymSetOptions(SYMOPT_DEBUG | SYMOPT_LOAD_LINES | SYMOPT_FAIL_CRITICAL_ERRORS); - // if (!SymLoadModule64(m_hDebuggeeProcess, m_hDebuggeeImage, NULL, NULL, NULL, NULL)) - // qDebug() << "SymLoadModule64 failed w/ error code" << GetLastError(); - //} -} - -void Debugger::handleExceptionEvent(DEBUG_EVENT* e) -{ - //BOOL bSuccess; - //SuspendThread(m_hDebuggeeThread); - - //CONTEXT context; - //memset(&context, 0, sizeof(context)); - //context.ContextFlags = CONTEXT_ALL; - //bSuccess = GetThreadContext(m_hDebuggeeThread, &context); - //if (!bSuccess) - // qDebug() << "GetThreadContext failed w/ error code" << GetLastError(); - //ResumeThread(m_hDebuggeeThread); - - //STACKFRAME64 stackFrame; - //stackFrame.AddrPC.Offset = context.Eip; - //stackFrame.AddrPC.Mode = AddrModeFlat; - //stackFrame.AddrFrame.Offset = context.Ebp; - //stackFrame.AddrFrame.Mode = AddrModeFlat; - //stackFrame.AddrStack.Offset = context.Esp; - //stackFrame.AddrStack.Mode = AddrModeFlat; - //m_currentStackTrace.clear(); - - //do { - // StackFrame sf; - // bSuccess = StackWalk64(IMAGE_FILE_MACHINE_I386, m_hDebuggeeProcess, m_hDebuggeeThread, &stackFrame, - // &context, NULL, SymFunctionTableAccess64, SymGetModuleBase64, NULL); - // if (bSuccess) { - // qDebug() << "StackWalk"; - // IMAGEHLP_MODULE64 moduleInfo; - // moduleInfo.SizeOfStruct = sizeof(moduleInfo); - // if (SymGetModuleInfo64(m_hDebuggeeProcess, stackFrame.AddrPC.Offset, &moduleInfo)) - // qDebug() << "SymGetModuleInfo64 success!"; - // else - // qDebug() << "SymGetModuleInfo64 failed w/ error code" << GetLastError(); - // } - - // if (stackFrame.AddrPC.Offset) { - // DWORD64 dwDisplacement; - // const size_t bufferSize = 200; - // class MySymbol : public IMAGEHLP_SYMBOL64 - // { - // public: - // private: - // char buffer[bufferSize]; - // }; - // MySymbol img; - // ZeroMemory(&img, sizeof(img)); - // img.SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64); - // img.MaxNameLength = bufferSize; - - // BOOL bSuccess; - // bSuccess = SymGetSymFromAddr64(m_hDebuggeeProcess, - // stackFrame.AddrPC.Offset, - // &dwDisplacement, - // &img); - // if (bSuccess) { - // qDebug() << "SymGetSymFromAddr64:" << img.Name; - // sf.symbol = QString::fromLocal8Bit(img.Name); - // } - // else - // qDebug() << "SymGetSymFromAddr64 failed w/ error code" << GetLastError(); - // } - - // if (stackFrame.AddrPC.Offset) { - // DWORD dwDisplacement; - // IMAGEHLP_LINE64 line; - // ZeroMemory(&line, sizeof(line)); - // line.SizeOfStruct = sizeof(IMAGEHLP_LINE64); - - // BOOL bSuccess; - // bSuccess = SymGetLineFromAddr64(m_hDebuggeeProcess, - // stackFrame.AddrPC.Offset, - // &dwDisplacement, - // &line); - // if (bSuccess) { - // //qDebug() << "SymGetLineFromAddr64:" << QString::fromUtf16((ushort*)line.FileName) << line.LineNumber; - // sf.filename = QString::fromUtf16((ushort*)line.FileName); - // sf.line = line.LineNumber; - // } else - // qDebug() << "SymGetLineFromAddr64 failed w/ error code" << GetLastError(); - - // m_currentStackTrace.append(sf); - // } - //} while (bSuccess); - - //emit debuggeePaused(); -} - -void Debugger::handleOutputDebugStringEvent(DEBUG_EVENT* e) -{ - //qDebug() << "OUTPUT_DEBUG_STRING_EVENT"; - //BOOL bSuccess; - //SIZE_T nNumberOfBytesRead; - //void* buffer; - //QString result; - //if (e->u.DebugString.fUnicode) { - // buffer = malloc(e->u.DebugString.nDebugStringLength * sizeof(WCHAR)); - //} else { - // buffer = malloc(e->u.DebugString.nDebugStringLength * sizeof(char)); - //} - - //bSuccess = ReadProcessMemory(m_hDebuggeeProcess, e->u.DebugString.lpDebugStringData, - // buffer, e->u.DebugString.nDebugStringLength, &nNumberOfBytesRead); - //if (bSuccess) { - // if (e->u.DebugString.fUnicode) - // result = QString::fromUtf16(reinterpret_cast<ushort*>(buffer), nNumberOfBytesRead); - // else - // result = QString::fromLocal8Bit(reinterpret_cast<char*>(buffer), nNumberOfBytesRead); - // emit debugOutput(result); - //} - //free(buffer); -} diff --git a/tests/manual/cdbdebugger/debugger.h b/tests/manual/cdbdebugger/debugger.h deleted file mode 100644 index f170caff67e..00000000000 --- a/tests/manual/cdbdebugger/debugger.h +++ /dev/null @@ -1,71 +0,0 @@ -#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; -}; diff --git a/tests/manual/cdbdebugger/main.cpp b/tests/manual/cdbdebugger/main.cpp deleted file mode 100644 index fb18f90e12e..00000000000 --- a/tests/manual/cdbdebugger/main.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "mainwindow.h" -#include <QApplication> - -int main(int argc, char* argv[]) -{ - QApplication app(argc, argv); - MainWindow mw; - if (argc >= 2) mw.setDebuggee(argv[1]); - mw.show(); - return app.exec(); -} diff --git a/tests/manual/cdbdebugger/mainwindow.cpp b/tests/manual/cdbdebugger/mainwindow.cpp deleted file mode 100644 index ec16cecfbed..00000000000 --- a/tests/manual/cdbdebugger/mainwindow.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "mainwindow.h" -#include <QFileDialog> -#include <QTextStream> -#include <QDebug> - -MainWindow::MainWindow() -: QMainWindow(0, 0) -{ - setupUi(this); - - connect(&m_debugger, SIGNAL(debugOutput(const QString&)), SLOT(appendOutput(const QString&))); - connect(&m_debugger, SIGNAL(debuggeePaused()), SLOT(onDebuggeePaused())); -} - -void MainWindow::setDebuggee(const QString& filename) -{ - m_debugger.openProcess(filename); -} - -void MainWindow::on_actionOpen_triggered() -{ - QString exeName; - exeName = QFileDialog::getOpenFileName(this, "Open Executable", ".", "*.exe"); - if (!exeName.isNull()) - m_debugger.openProcess(exeName); -} - -void MainWindow::on_actionExit_triggered() -{ - close(); -} - -void MainWindow::on_actionBreak_triggered() -{ - m_debugger.breakAtCurrentPosition(); -} - -void MainWindow::on_actionRun_triggered() -{ - m_debugger.continueProcess(); -} - -void MainWindow::on_lstStack_itemClicked(QListWidgetItem* item) -{ - Debugger::StackFrame sf = m_stackTrace[ lstStack->row(item) ]; - QFile f(sf.filename); - if (!f.exists()) - return; - - f.open(QFile::ReadOnly); - QTextStream ts(&f); - int cursorPos = 0; - int currentLine = 0; - QString fullText; - do { - QString strLine = ts.readLine(); - currentLine++; - if (currentLine < sf.line) - cursorPos += strLine.length(); - fullText.append(strLine + "\n"); - } while (!ts.atEnd()); - codeWindow->setPlainText(fullText); - - //QList<QTextEdit::ExtraSelection> extraSelections; - //extraSelections.append(QTextEdit::ExtraSelection()); - - //QTextEdit::ExtraSelection& exsel = extraSelections.first(); - //exsel.cursor.setPosition(cursorPos, QTextCursor::MoveAnchor); - //exsel.cursor.select(QTextCursor::LineUnderCursor); - //exsel.format.setBackground(Qt::red); - //exsel.format.setFontUnderline(true); - //codeWindow->setExtraSelections(extraSelections); -} - -void MainWindow::appendOutput(const QString& str) -{ - teOutput->setPlainText(teOutput->toPlainText() + str); -} - -void MainWindow::onDebuggeePaused() -{ - lstStack->clear(); - m_stackTrace = m_debugger.stackTrace(); - foreach (Debugger::StackFrame sf, m_stackTrace) { - QString str = sf.symbol; - if (!sf.filename.isEmpty()) - str.append(" at " + sf.filename + ":" + QString::number(sf.line)); - lstStack->addItem(str); - } -} diff --git a/tests/manual/cdbdebugger/mainwindow.h b/tests/manual/cdbdebugger/mainwindow.h deleted file mode 100644 index 9831b508bbd..00000000000 --- a/tests/manual/cdbdebugger/mainwindow.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "ui_mainwindow.h" -#include "debugger.h" - -class MainWindow : public QMainWindow, private Ui_MainWindow -{ - Q_OBJECT -public: - MainWindow(); - - void setDebuggee(const QString& filename); - -private slots: - void on_actionOpen_triggered(); - void on_actionExit_triggered(); - void on_actionBreak_triggered(); - void on_actionRun_triggered(); - void on_lstStack_itemClicked(QListWidgetItem*); - void appendOutput(const QString&); - void onDebuggeePaused(); - -private: - Debugger m_debugger; - Debugger::StackTrace m_stackTrace; -}; \ No newline at end of file diff --git a/tests/manual/cdbdebugger/mainwindow.ui b/tests/manual/cdbdebugger/mainwindow.ui deleted file mode 100644 index 56b0706f2d2..00000000000 --- a/tests/manual/cdbdebugger/mainwindow.ui +++ /dev/null @@ -1,174 +0,0 @@ -<ui version="4.0" > - <class>MainWindow</class> - <widget class="QMainWindow" name="MainWindow" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>599</width> - <height>606</height> - </rect> - </property> - <property name="windowTitle" > - <string>MainWindow</string> - </property> - <widget class="QWidget" name="centralwidget" > - <layout class="QVBoxLayout" name="verticalLayout" > - <item> - <widget class="QPlainTextEdit" name="codeWindow" > - <property name="sizePolicy" > - <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > - <horstretch>0</horstretch> - <verstretch>1</verstretch> - </sizepolicy> - </property> - <property name="undoRedoEnabled" > - <bool>false</bool> - </property> - <property name="lineWrapMode" > - <enum>QPlainTextEdit::NoWrap</enum> - </property> - <property name="readOnly" > - <bool>true</bool> - </property> - <property name="textInteractionFlags" > - <set>Qt::NoTextInteraction</set> - </property> - </widget> - </item> - <item> - <widget class="QTabWidget" name="tabWidget" > - <property name="sizePolicy" > - <sizepolicy vsizetype="Expanding" hsizetype="Expanding" > - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="currentIndex" > - <number>1</number> - </property> - <widget class="QWidget" name="tab" > - <attribute name="title" > - <string>Threads</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout" > - <item> - <widget class="QListWidget" name="lstThreads" /> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_2" > - <attribute name="title" > - <string>Stack</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout_2" > - <item> - <widget class="QListWidget" name="lstStack" /> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_3" > - <attribute name="title" > - <string>Output</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout_3" > - <item> - <widget class="QPlainTextEdit" name="teOutput" /> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <widget class="QMenuBar" name="menubar" > - <property name="geometry" > - <rect> - <x>0</x> - <y>0</y> - <width>599</width> - <height>21</height> - </rect> - </property> - <widget class="QMenu" name="menu_Debug" > - <property name="title" > - <string>&Debug</string> - </property> - <addaction name="actionRun" /> - <addaction name="actionBreak" /> - <addaction name="actionStepOver" /> - <addaction name="actionStopDebugging" /> - <addaction name="actionStepInto" /> - </widget> - <widget class="QMenu" name="menu_File" > - <property name="title" > - <string>&File</string> - </property> - <addaction name="actionOpen" /> - <addaction name="actionClose" /> - <addaction name="separator" /> - <addaction name="actionExit" /> - </widget> - <addaction name="menu_File" /> - <addaction name="menu_Debug" /> - </widget> - <widget class="QStatusBar" name="statusbar" /> - <action name="actionOpen" > - <property name="text" > - <string>&Open...</string> - </property> - <property name="shortcut" > - <string>Ctrl+O</string> - </property> - </action> - <action name="actionClose" > - <property name="text" > - <string>&Close</string> - </property> - </action> - <action name="actionExit" > - <property name="text" > - <string>E&xit</string> - </property> - </action> - <action name="actionRun" > - <property name="text" > - <string>&Run</string> - </property> - <property name="shortcut" > - <string>F5</string> - </property> - </action> - <action name="actionBreak" > - <property name="text" > - <string>&Break</string> - </property> - </action> - <action name="actionStepOver" > - <property name="text" > - <string>Step over</string> - </property> - <property name="shortcut" > - <string>F10</string> - </property> - </action> - <action name="actionStepInto" > - <property name="text" > - <string>Step into</string> - </property> - <property name="shortcut" > - <string>F11</string> - </property> - </action> - <action name="actionStopDebugging" > - <property name="text" > - <string>Stop debugging</string> - </property> - <property name="shortcut" > - <string>Shift+F5</string> - </property> - </action> - </widget> - <resources/> - <connections/> -</ui> diff --git a/tests/manual/cdbdebugger/outputcallback.cpp b/tests/manual/cdbdebugger/outputcallback.cpp deleted file mode 100644 index 4a0ca81bec1..00000000000 --- a/tests/manual/cdbdebugger/outputcallback.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include <stdio.h> -#include <windows.h> -#include <dbgeng.h> - -#include "outputcallback.h" - -WinDbgOutputCallback g_outputCallbacks; - -STDMETHODIMP -WinDbgOutputCallback::QueryInterface( - THIS_ - IN REFIID InterfaceId, - OUT PVOID* Interface - ) -{ - *Interface = NULL; - - if (IsEqualIID(InterfaceId, __uuidof(IUnknown)) || - IsEqualIID(InterfaceId, __uuidof(IDebugOutputCallbacks))) - { - *Interface = (IDebugOutputCallbacks *)this; - AddRef(); - return S_OK; - } - else - { - return E_NOINTERFACE; - } -} - -STDMETHODIMP_(ULONG) -WinDbgOutputCallback::AddRef( - THIS - ) -{ - // This class is designed to be static so - // there's no true refcount. - return 1; -} - -STDMETHODIMP_(ULONG) -WinDbgOutputCallback::Release( - THIS - ) -{ - // This class is designed to be static so - // there's no true refcount. - return 0; -} - -STDMETHODIMP -WinDbgOutputCallback::Output( - THIS_ - IN ULONG Mask, - IN PCSTR Text - ) -{ - UNREFERENCED_PARAMETER(Mask); - fputs(Text, stdout); - return S_OK; -} diff --git a/tests/manual/cdbdebugger/outputcallback.h b/tests/manual/cdbdebugger/outputcallback.h deleted file mode 100644 index 73004c7be67..00000000000 --- a/tests/manual/cdbdebugger/outputcallback.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __OUT_HPP__ -#define __OUT_HPP__ - -class WinDbgOutputCallback : public IDebugOutputCallbacks -{ -public: - // IUnknown. - STDMETHOD(QueryInterface)( - THIS_ - IN REFIID InterfaceId, - OUT PVOID* Interface - ); - STDMETHOD_(ULONG, AddRef)( - THIS - ); - STDMETHOD_(ULONG, Release)( - THIS - ); - - // IDebugOutputCallbacks. - STDMETHOD(Output)( - THIS_ - IN ULONG Mask, - IN PCSTR Text - ); -}; - -extern WinDbgOutputCallback g_outputCallbacks; - -#endif // #ifndef __OUT_HPP__ diff --git a/tests/manual/cdbdebugger/windbgeventcallback.cpp b/tests/manual/cdbdebugger/windbgeventcallback.cpp deleted file mode 100644 index 39826f99a59..00000000000 --- a/tests/manual/cdbdebugger/windbgeventcallback.cpp +++ /dev/null @@ -1,186 +0,0 @@ -#include "windbgeventcallback.h" -#include "debugger.h" - -STDMETHODIMP -WinDbgEventCallback::QueryInterface( - THIS_ - IN REFIID InterfaceId, - OUT PVOID* Interface - ) -{ - *Interface = NULL; - - if (IsEqualIID(InterfaceId, __uuidof(IUnknown)) || - IsEqualIID(InterfaceId, __uuidof(IDebugOutputCallbacks))) - { - *Interface = (IDebugOutputCallbacks *)this; - AddRef(); - return S_OK; - } - else - { - return E_NOINTERFACE; - } -} - -STDMETHODIMP_(ULONG) -WinDbgEventCallback::AddRef( - THIS - ) -{ - // This class is designed to be static so - // there's no true refcount. - return 1; -} - -STDMETHODIMP_(ULONG) -WinDbgEventCallback::Release( - THIS - ) -{ - // This class is designed to be static so - // there's no true refcount. - return 0; -} - -STDMETHODIMP WinDbgEventCallback::GetInterestMask( - THIS_ - __out PULONG Mask - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::Breakpoint( - THIS_ - __in PDEBUG_BREAKPOINT Bp - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::Exception( - THIS_ - __in PEXCEPTION_RECORD64 Exception, - __in ULONG FirstChance - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::CreateThread( - THIS_ - __in ULONG64 Handle, - __in ULONG64 DataOffset, - __in ULONG64 StartOffset - ) -{ - //Debugger::ThreadInfo ti; - //ti.handle = Handle; - //ti.dataOffset = DataOffset; - //ti.startOffset = StartOffset; - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::ExitThread( - THIS_ - __in ULONG ExitCode - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::CreateProcess( - THIS_ - __in ULONG64 ImageFileHandle, - __in ULONG64 Handle, - __in ULONG64 BaseOffset, - __in ULONG ModuleSize, - __in_opt PCSTR ModuleName, - __in_opt PCSTR ImageName, - __in ULONG CheckSum, - __in ULONG TimeDateStamp, - __in ULONG64 InitialThreadHandle, - __in ULONG64 ThreadDataOffset, - __in ULONG64 StartOffset - ) -{ - m_pDebugger->m_hDebuggeeProcess = (HANDLE)Handle; - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::ExitProcess( - THIS_ - __in ULONG ExitCode - ) -{ - m_pDebugger->m_hDebuggeeProcess = 0; - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::LoadModule( - THIS_ - __in ULONG64 ImageFileHandle, - __in ULONG64 BaseOffset, - __in ULONG ModuleSize, - __in_opt PCSTR ModuleName, - __in_opt PCSTR ImageName, - __in ULONG CheckSum, - __in ULONG TimeDateStamp - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::UnloadModule( - THIS_ - __in_opt PCSTR ImageBaseName, - __in ULONG64 BaseOffset - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::SystemError( - THIS_ - __in ULONG Error, - __in ULONG Level - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::SessionStatus( - THIS_ - __in ULONG Status - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::ChangeDebuggeeState( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::ChangeEngineState( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ) -{ - return S_OK; -} - -STDMETHODIMP WinDbgEventCallback::ChangeSymbolState( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ) -{ - return S_OK; -} diff --git a/tests/manual/cdbdebugger/windbgeventcallback.h b/tests/manual/cdbdebugger/windbgeventcallback.h deleted file mode 100644 index b405f77014a..00000000000 --- a/tests/manual/cdbdebugger/windbgeventcallback.h +++ /dev/null @@ -1,126 +0,0 @@ -#pragma once - -#include <windows.h> -#include <dbgeng.h> - -class Debugger; - -class WinDbgEventCallback : public IDebugEventCallbacks -{ -public: - WinDbgEventCallback(Debugger* dbg) - : m_pDebugger(dbg) - {} - - // IUnknown. - STDMETHOD(QueryInterface)( - THIS_ - IN REFIID InterfaceId, - OUT PVOID* Interface - ); - STDMETHOD_(ULONG, AddRef)( - THIS - ); - STDMETHOD_(ULONG, Release)( - THIS - ); - - // IDebugEventCallbacks. - - STDMETHOD(GetInterestMask)( - THIS_ - __out PULONG Mask - ); - - STDMETHOD(Breakpoint)( - THIS_ - __in PDEBUG_BREAKPOINT Bp - ); - - STDMETHOD(Exception)( - THIS_ - __in PEXCEPTION_RECORD64 Exception, - __in ULONG FirstChance - ); - - STDMETHOD(CreateThread)( - THIS_ - __in ULONG64 Handle, - __in ULONG64 DataOffset, - __in ULONG64 StartOffset - ); - STDMETHOD(ExitThread)( - THIS_ - __in ULONG ExitCode - ); - - STDMETHOD(CreateProcess)( - THIS_ - __in ULONG64 ImageFileHandle, - __in ULONG64 Handle, - __in ULONG64 BaseOffset, - __in ULONG ModuleSize, - __in_opt PCSTR ModuleName, - __in_opt PCSTR ImageName, - __in ULONG CheckSum, - __in ULONG TimeDateStamp, - __in ULONG64 InitialThreadHandle, - __in ULONG64 ThreadDataOffset, - __in ULONG64 StartOffset - ); - - STDMETHOD(ExitProcess)( - THIS_ - __in ULONG ExitCode - ); - - STDMETHOD(LoadModule)( - THIS_ - __in ULONG64 ImageFileHandle, - __in ULONG64 BaseOffset, - __in ULONG ModuleSize, - __in_opt PCSTR ModuleName, - __in_opt PCSTR ImageName, - __in ULONG CheckSum, - __in ULONG TimeDateStamp - ); - - STDMETHOD(UnloadModule)( - THIS_ - __in_opt PCSTR ImageBaseName, - __in ULONG64 BaseOffset - ); - - STDMETHOD(SystemError)( - THIS_ - __in ULONG Error, - __in ULONG Level - ); - - STDMETHOD(SessionStatus)( - THIS_ - __in ULONG Status - ); - - STDMETHOD(ChangeDebuggeeState)( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ); - - STDMETHOD(ChangeEngineState)( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ); - - STDMETHOD(ChangeSymbolState)( - THIS_ - __in ULONG Flags, - __in ULONG64 Argument - ); - -private: - Debugger* m_pDebugger; -}; - diff --git a/tests/manual/cdbdebugger/windbgthread.cpp b/tests/manual/cdbdebugger/windbgthread.cpp deleted file mode 100644 index 75c455832f6..00000000000 --- a/tests/manual/cdbdebugger/windbgthread.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include "windbgthread.h" -#include <QDebug> - -#define DBGHELP_TRANSLATE_TCHAR -#include <Dbghelp.h> - -WinDbgThread::WinDbgThread(QObject* parent) -: QThread(parent), - m_state(Idle) -{ -} - -WinDbgThread::~WinDbgThread() -{ - stopProcess(); -} - -void WinDbgThread::startProcess(const QString& filename) -{ - stopProcess(); - m_bOwnsProcess = true; - m_processFileName = filename; - m_pi.dwProcessId = 0; - QThread::start(); -} - -void WinDbgThread::stopProcess() -{ - if (!QThread::isRunning()) - return; - - switch (m_state) - { - case ProcessRunning: - if (m_bOwnsProcess) { - m_bOwnsProcess = false; // don't terminate in the loop again - TerminateProcess(m_pi.hProcess, 0); - } - // don't break here - case ProcessPaused: - m_bAbortEventPollingLoop = true; - resume(); - break; - } - QThread::wait(5000); - if (QThread::isRunning()) { - qWarning("WinDbgThread still running... terminating!"); - QThread::terminate(); - } -} - -void WinDbgThread::attachToProcess(DWORD processId) -{ - m_bOwnsProcess = false; - m_processFileName = QString(); - m_pi.dwProcessId = processId; - QThread::start(); -} - -void WinDbgThread::run() -{ - qDebug() << "WinDbgThread started"; - // start process or attach process - if (m_bOwnsProcess) { - // create new process - internalStartProcess(); - } else { - // attach to process - qWarning("attach to process not yet implemented"); - return; - } - - m_hThisThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, GetCurrentThreadId()); - if (!m_hThisThread) { - qWarning("WinDbgThread: can't open thread handle"); - return; - } - - DEBUG_EVENT debugEvent; - m_bAbortEventPollingLoop = false; - while (WaitForDebugEvent(&debugEvent, INFINITE)) { - setState(ProcessPaused); - emit debugEventOccured(&debugEvent); - suspend(); - if (m_bAbortEventPollingLoop) - break; - ContinueDebugEvent(debugEvent.dwProcessId, debugEvent.dwThreadId, DBG_CONTINUE); - setState(ProcessRunning); - } - - setState(Idle); - if (m_bOwnsProcess) { - TerminateProcess(m_pi.hProcess, 0); - } - CloseHandle(m_pi.hProcess); - CloseHandle(m_pi.hThread); - CloseHandle(m_hThisThread); - - qDebug() << "WinDbgThread finished"; -} - -void WinDbgThread::continueProcess() -{ - if (m_state == ProcessPaused) - resume(); -} - -void WinDbgThread::pauseProcess() -{ - if (m_state == ProcessRunning) - DebugBreakProcess(m_pi.hProcess); -} - -void WinDbgThread::internalStartProcess() -{ - BOOL bSuccess; - - STARTUPINFO si; - ZeroMemory(&si, sizeof(si)); - si.cb = sizeof(si); - si.wShowWindow = TRUE; - - ZeroMemory(&m_pi, sizeof(m_pi)); - - DWORD dwCreationFlags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; - bSuccess = CreateProcess(m_processFileName.utf16(), NULL, NULL, NULL, FALSE, - dwCreationFlags, - NULL, NULL, &si, &m_pi - ); - - if (bSuccess) - setState(ProcessRunning); - else - setState(Idle); -} - -void WinDbgThread::setState(State s) -{ - m_state = s; -} - -void WinDbgThread::suspend() -{ - SuspendThread(m_hThisThread); -} - -void WinDbgThread::resume() -{ - ResumeThread(m_hThisThread); -} diff --git a/tests/manual/cdbdebugger/windbgthread.h b/tests/manual/cdbdebugger/windbgthread.h deleted file mode 100644 index 2e34fae8923..00000000000 --- a/tests/manual/cdbdebugger/windbgthread.h +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include <QThread> -#include <windows.h> - -class WinDbgThread : protected QThread -{ - Q_OBJECT -public: - WinDbgThread(QObject* parent = 0); - ~WinDbgThread(); - - void startProcess(const QString& filename); - void attachToProcess(DWORD processId); - void continueProcess(); - void pauseProcess(); - void stopProcess(); - const QString& processFileName() { return m_processFileName; } - - QObject* asQObject() { return this; } - //using QThread::isRunning; - -signals: - void debugEventOccured(void*); - -protected: - void run(); - -private: - void internalStartProcess(); - void suspend(); - void resume(); - - enum State { - Idle, - ProcessRunning, - ProcessPaused - }; - - void setState(State s); - -private: - State m_state; - QString m_processFileName; - HANDLE m_hThisThread; - PROCESS_INFORMATION m_pi; - bool m_bOwnsProcess; - bool m_bAbortEventPollingLoop; -}; diff --git a/tests/manual/cplusplus-dump/main.cpp b/tests/manual/cplusplus-dump/main.cpp index c45d1b4718a..8ca89395abc 100644 --- a/tests/manual/cplusplus-dump/main.cpp +++ b/tests/manual/cplusplus-dump/main.cpp @@ -55,7 +55,9 @@ #include <cstdlib> #include <fstream> #include <iostream> -#include <cxxabi.h> +#ifdef __GNUC__ +# include <cxxabi.h> +#endif using namespace CPlusPlus; @@ -103,9 +105,12 @@ protected: } static QByteArray name(AST *ast) { +#ifdef __GNUC__ QByteArray name = abi::__cxa_demangle(typeid(*ast).name(), 0, 0, 0) + 11; name.truncate(name.length() - 3); - +#else + QByteArray name = typeid(*ast).name(); +#endif return name; } @@ -199,7 +204,11 @@ public: protected: QByteArray name(Symbol *s) { +#ifdef __GNUC__ QByteArray result = abi::__cxa_demangle(typeid(*s).name(), 0, 0, 0) + 11; +#else + QByteArray result = typeid(*s).name(); +#endif if (s->identifier()) { result.append("\\nid: "); result.append(s->identifier()->chars()); diff --git a/tests/manual/fakevim/fakevim.pro b/tests/manual/fakevim/fakevim.pro index 4f00d4dcdff..b6a88770762 100644 --- a/tests/manual/fakevim/fakevim.pro +++ b/tests/manual/fakevim/fakevim.pro @@ -2,6 +2,7 @@ FAKEVIMHOME = ../../../src/plugins/fakevim UTILSDIR = ../../../src/libs +DEFINES += QTCREATOR_UTILS_STATIC_LIB SOURCES += \ main.cpp \ $$FAKEVIMHOME/fakevimhandler.cpp \ diff --git a/tests/manual/gdbdebugger/gdbdebugger.pro b/tests/manual/gdbdebugger/gdbdebugger.pro new file mode 100644 index 00000000000..f45a4ce4002 --- /dev/null +++ b/tests/manual/gdbdebugger/gdbdebugger.pro @@ -0,0 +1,6 @@ +TEMPLATE=subdirs + +SUBDIRS= \ +gui \ +helper \ +simple diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro new file mode 100644 index 00000000000..413a76aff8f --- /dev/null +++ b/tests/manual/manual.pro @@ -0,0 +1,28 @@ +TEMPLATE=subdirs + +SUBDIRS= \ +cplusplus \ +cplusplus-dump \ +fakevim \ +gdbdebugger \ +preprocessor \ +subdir_proparser \ +trklauncher + +win { +# Uses CDB debugger + SUBDIRS += ccdb +} + +unix { +# Uses popen + SUBDIRS += \ +# Profile library paths issues + process \ + ssh +} + +# Not compiling, popen + missing includes +# SUBDIRS += plain-cplusplus + +subdir_proparser.file=proparser/testreader.pro -- GitLab