summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-02-11 14:52:29 +0100
committerhjk <qtc-committer@nokia.com>2009-02-11 14:52:29 +0100
commitdddd905bc77301db7a52ce9fe4a7ed9331eef590 (patch)
treeb7479baa8bf9c970e9af21e57cee88d8115d392b
parente033239d7b074a52b5fd0a13bc5c8e0814d88ac6 (diff)
downloadqt-creator-dddd905bc77301db7a52ce9fe4a7ed9331eef590.tar.gz
Fixes: debugger: procinterrupt logic
-rw-r--r--src/plugins/debugger/procinterrupt.cpp66
1 files changed, 38 insertions, 28 deletions
diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp
index 824ccac41f..47a309deac 100644
--- a/src/plugins/debugger/procinterrupt.cpp
+++ b/src/plugins/debugger/procinterrupt.cpp
@@ -33,7 +33,8 @@
#include "procinterrupt.h"
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN)
+
#include <windows.h>
#include <Tlhelp32.h>
@@ -75,7 +76,37 @@ DWORD findProcessId(DWORD parentId)
CloseHandle(hProcList);
return procId;
}
-#else
+
+bool Debugger::Internal::interruptProcess(int pID)
+{
+ DWORD pid = pID;
+ if (!pid)
+ return false;
+
+ PtrCreateRemoteThread libFunc = resolveCreateRemoteThread();
+ if (libFunc) {
+ DWORD dwThreadId = 0;
+ HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
+ HANDLE hthread = libFunc(hproc, NULL, 0, (LPTHREAD_START_ROUTINE)DebugBreak, 0, 0, &dwThreadId);
+ CloseHandle(hthread);
+ if (dwThreadId)
+ return true;
+ }
+
+ return false;
+}
+
+bool Debugger::Internal::interruptChildProcess(Q_PID parentPID)
+{
+ DWORD pid = findProcessId(parentPID->dwProcessId);
+ return interruptProcess(pid);
+}
+
+#endif // defined(Q_OS_WIN)
+
+
+
+#if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
#include <QtCore/QLatin1String>
#include <QtCore/QString>
@@ -89,12 +120,14 @@ DWORD findProcessId(DWORD parentId)
#include <sys/sysctl.h>
-#define OPProcessValueUnknown UINT_MAX
+
+using namespace Debugger::Internal;
/* Mac OS X
int OPParentIDForProcessID(int pid)
// Returns the parent process id for the given process id (pid)
{
+ const uint OPProcessValueUnknown = UINT_MAX;
struct kinfo_proc info;
size_t length = sizeof(struct kinfo_proc);
int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid };
@@ -140,44 +173,21 @@ int findChildProcess(int parentId)
return -1;
}
-#endif
-
bool Debugger::Internal::interruptProcess(int pID)
{
-#ifdef Q_OS_WIN
- DWORD pid = pID;
- if (!pid)
- return false;
-
- PtrCreateRemoteThread libFunc = resolveCreateRemoteThread();
- if (libFunc) {
- DWORD dwThreadId = 0;
- HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
- HANDLE hthread = libFunc(hproc, NULL, 0, (LPTHREAD_START_ROUTINE)DebugBreak, 0, 0, &dwThreadId);
- CloseHandle(hthread);
- if (dwThreadId)
- return true;
- }
-#else
int procId = pID;
if (procId != -1) {
if (kill(procId, SIGINT) == 0)
return true;
}
-
-#endif
-
return false;
}
bool Debugger::Internal::interruptChildProcess(Q_PID parentPID)
{
-#ifdef WIN32
- DWORD pid = findProcessId(parentPID->dwProcessId);
- return interruptProcess(pid);
-#else
int procId = findChildProcess(parentPID);
//qDebug() << "INTERRUPTING PROCESS" << procId;
return interruptProcess(procId);
-#endif
}
+
+#endif // defined(Q_OS_LINUX) || defined(Q_OS_MAC)