summaryrefslogtreecommitdiffstats
path: root/main.cpp
diff options
context:
space:
mode:
authorRainer Keller <rainer.keller@digia.com>2013-04-16 12:05:45 +0200
committerRainer Keller <rainer.keller@digia.com>2013-04-16 12:05:45 +0200
commit9a7f2e2ee373e9f8a6dd57ab89e963d8952bb94c (patch)
treee4e7e3c3fd6760d2a75c0898a569c6e0b67820a7 /main.cpp
parentd3a1aa1a91004437fcf108e34076022b5d4630a6 (diff)
Add debug support
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp47
1 files changed, 44 insertions, 3 deletions
diff --git a/main.cpp b/main.cpp
index d34ccb1..71e37cd 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,7 @@
#include <QCoreApplication>
#include <QFile>
#include <QDebug>
+#include <QTcpServer>
#include <errno.h>
#include <unistd.h>
#include <QStringList>
@@ -95,6 +96,17 @@ int lockFile(int handle)
return 0;
}
+int findFirstFreePort(int start, int end)
+{
+ QTcpServer s;
+
+ for (; start <= end; start++) {
+ if (s.listen(QHostAddress::Any, start))
+ return start;
+ }
+ return -1;
+}
+
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
@@ -123,7 +135,7 @@ int main(int argc, char **argv)
while (!args.isEmpty()) {
if (args[0] == "--start") {
if (args.size() < 2) {
- qWarning("--start requires and argument");
+ qWarning("--start requires an argument");
return 1;
}
binary = args[1];
@@ -134,6 +146,37 @@ int main(int argc, char **argv)
}
stop(f);
loadDefaults(defaultArgs);
+ defaultArgs.push_front(binary);
+ } else if (args[0] == "--start-debug") {
+ if (args.size() < 4) {
+ qWarning("--start-debug requires arguments: start-port-range end-port-range and executable");
+ return 1;
+ }
+ int range_start = args[1].toUInt();
+ int range_end = args[2].toUInt();
+ binary = args[3];
+ args.removeFirst();
+ args.removeFirst();
+ args.removeFirst();
+ if (range_start == 0 || range_end == 0 || range_start > range_end) {
+ qWarning("Invalid port range");
+ return 1;
+ }
+ if (binary.isEmpty()) {
+ qWarning("App path is empty");
+ return 1;
+ }
+ stop(f);
+ loadDefaults(defaultArgs);
+
+ int port = findFirstFreePort(range_start, range_end);
+ if (port < 0) {
+ qWarning("Could not find an unsued port in range");
+ return 1;
+ }
+ defaultArgs.push_front(binary);
+ defaultArgs.push_front("localhost" + QString::number(port));
+ defaultArgs.push_front("gdbserver");
} else if (args[0] == "--stop") {
stop(f);
return 0;
@@ -144,8 +187,6 @@ int main(int argc, char **argv)
args.removeFirst();
}
- defaultArgs.push_front(binary);
-
char **arglist = new char*[defaultArgs.size()+1];
for (int i = 0; i < defaultArgs.size(); i++) {
arglist[i] = strdup(defaultArgs[i].toLocal8Bit().constData());