]> git.tdb.fi Git - gldbg.git/blobdiff - source/process.cpp
Add a missing #include
[gldbg.git] / source / process.cpp
index 0fc9e98f6410e0b6657a50106a1d2459385d594e..48881a9b6d125c9be3e48a631c08d0bf221ad9a1 100644 (file)
@@ -1,20 +1,21 @@
 /* $Id$
 
 This file is part of gldbg
-Copyright © 2009  Mikko Rasa, Mikkosoft Productions
+Copyright © 2009, 2011  Mikko Rasa, Mikkosoft Productions
 Distributed under the GPL
 */
 
+#include <stdexcept>
 #include <cstdlib>
 #include <cerrno>
 #include <cstring>
+#include <unistd.h>
 #include <sys/ptrace.h>
 #include <sys/wait.h>
-#include <msp/core/except.h>
 #include "process.h"
+#include "strformat.h"
 
 using namespace std;
-using namespace Msp;
 
 Process::Process(const vector<string> &a):
        args(a),
@@ -30,7 +31,7 @@ void Process::setenv(const string &key, const string &value)
 void Process::launch()
 {
        if(state!=INACTIVE)
-               throw InvalidState("Program is already running");
+               throw logic_error("Program is already running");
 
        pid = fork();
        if(pid==0)
@@ -48,7 +49,7 @@ void Process::launch()
        else if(pid>0)
                state = STARTING;
        else
-               throw SystemError("Could not launch process", errno);
+               throw runtime_error(strformat("Could not launch process: %s", strerror(errno)));
 }
 
 int Process::check()
@@ -90,7 +91,7 @@ int Process::check()
 void Process::resume(int sig)
 {
        if(state!=STOPPED)
-               throw InvalidState("Program is not stopped");
+               throw logic_error("Program is not stopped");
        ptrace(PTRACE_CONT, 0, (void *)sig);
        state = RUNNING;
 }
@@ -98,7 +99,7 @@ void Process::resume(int sig)
 void Process::kill()
 {
        if(state==INACTIVE)
-               throw InvalidState("Program is not running");
+               throw logic_error("Program is not running");
        ptrace(PTRACE_KILL, 0, 0);
        // Make the debugger wait() for us
        state = RUNNING;
@@ -108,6 +109,6 @@ long Process::ptrace(int req, void *addr, void *data)
 {
        int ret = ::ptrace((__ptrace_request)req, pid, addr, data);
        if(ret==-1 && ((req!=PTRACE_PEEKTEXT && req!=PTRACE_PEEKDATA && req!=PTRACE_PEEKUSER) || errno))
-               throw SystemError("ptrace error", errno);
+               throw runtime_error(strformat("ptrace error: %s", strerror(errno)));
        return ret;
 }