summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/procinterrupt.cpp
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2009-02-11 12:19:13 +0100
committerhjk <qtc-committer@nokia.com>2009-02-11 12:19:13 +0100
commita29d22830e0086f1df3125859c9c86758d007c42 (patch)
tree39098dc0f0b39c19a242b4ba37da311dca2ad2d6 /src/plugins/debugger/procinterrupt.cpp
parent678488e7d93aee37aef4dc0a2b4af3ef1210b3dc (diff)
downloadqt-creator-a29d22830e0086f1df3125859c9c86758d007c42.tar.gz
Fixes: prepare work on procinterrupt
Diffstat (limited to 'src/plugins/debugger/procinterrupt.cpp')
-rw-r--r--src/plugins/debugger/procinterrupt.cpp69
1 files changed, 40 insertions, 29 deletions
diff --git a/src/plugins/debugger/procinterrupt.cpp b/src/plugins/debugger/procinterrupt.cpp
index 08f7d39280..1817047d3e 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,22 @@ 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, 2) == 0)
+ // used SIGINT previously
+ if (kill(procId, SIGTRAP) == 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)