]> git.tdb.fi Git - gldbg.git/blobdiff - source/commandinterpreter.cpp
Prompt to terminate target process in exit command if it's still running
[gldbg.git] / source / commandinterpreter.cpp
index 36c3b3c18752e32ed2bb2197683a571fc5308ef4..abc9dda60b07bc83d5125eac1612f8096d5e25eb 100644 (file)
@@ -6,6 +6,7 @@ Distributed under the GPL
 */
 
 #include <signal.h>
+#include <readline/readline.h>
 #include <msp/core/except.h>
 #include <msp/io/file.h>
 #include <msp/io/print.h>
@@ -47,8 +48,10 @@ CommandInterpreter::CommandInterpreter(GlDbg &d):
 
        commands["trace"] = Command(&CommandInterpreter::cmd_trace,
                "Traces GL function calls",
-               "trace >FILE\n"
-               "  Send trace output to FILE.  As a special case, - means stdout.\n\n"
+               "trace\n"
+               "  Send trace output to stdout.\n"
+               "trace FILE\n"
+               "  Send trace output to FILE (- for stdout).\n\n"
                "trace {off|on}\n"
                "  Temporarily suspend or resume trace without closing the file.\n\n"
                "trace end\n"
@@ -153,43 +156,49 @@ void CommandInterpreter::cmd_kill(const string &)
 
 void CommandInterpreter::cmd_exit(const string &)
 {
-       gldbg.quit();
+       if(gldbg.get_process().get_state()!=Process::INACTIVE)
+       {
+               IO::print("Program is still running.  Kill it?\n");
+               char *answer = readline("[y/n] ");
+               if(answer[0]=='y')
+               {
+                       gldbg.get_process().kill();
+                       gldbg.quit(true);
+               }
+               else
+                       IO::print("Not confirmed.\n");
+       }
+       else
+               gldbg.quit(false);
 }
 
 void CommandInterpreter::cmd_trace(const string &args)
 {
        Tracer &tracer = gldbg.get_tracer();
-       if(args[0]=='>')
+       if(args.empty() || args=="-")
        {
-               string fn = args.substr(1);
-               if(fn=="-")
-               {
-                       tracer.set_output(IO::cout);
-                       IO::print("Tracing to stdout\n");
-               }
-               else
-               {
-                       tracer.set_output(new IO::File(fn, IO::M_WRITE));
-                       IO::print("Tracing to %s\n", fn);
-               }
+               tracer.set_output(IO::cout);
+               IO::print("Tracing to stdout\n");
+       }
+       else if(args=="on")
+       {
+               tracer.enable();
+               IO::print("Tracing enabled\n");
+       }
+       else if(args=="off")
+       {
+               tracer.disable();
+               IO::print("Tracing disabled\n");
+       }
+       else if(args=="end")
+       {
+               tracer.set_output(0);
+               IO::print("Tracing terminated\n");
        }
        else
        {
-               if(args=="on")
-               {
-                       tracer.enable();
-                       IO::print("Tracing enabled\n");
-               }
-               else if(args=="off")
-               {
-                       tracer.disable();
-                       IO::print("Tracing disabled\n");
-               }
-               else if(args=="end")
-               {
-                       tracer.set_output(0);
-                       IO::print("Tracing terminated\n");
-               }
+               tracer.set_output(new IO::File(args, IO::M_WRITE));
+               IO::print("Tracing to %s\n", args);
        }
 }