From c0ba680779ab15fe46442765fb7cf136aadfda65 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 19 Dec 2009 14:51:58 +0000 Subject: [PATCH] Make trace command more straightforward Set process state to running when killed --- source/commandinterpreter.cpp | 53 ++++++++++++++++------------------- source/process.cpp | 2 ++ 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/source/commandinterpreter.cpp b/source/commandinterpreter.cpp index 36c3b3c..9660aaa 100644 --- a/source/commandinterpreter.cpp +++ b/source/commandinterpreter.cpp @@ -47,8 +47,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" @@ -159,37 +161,30 @@ void CommandInterpreter::cmd_exit(const string &) 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); } } diff --git a/source/process.cpp b/source/process.cpp index ebc0b95..0fc9e98 100644 --- a/source/process.cpp +++ b/source/process.cpp @@ -100,6 +100,8 @@ void Process::kill() if(state==INACTIVE) throw InvalidState("Program is not running"); ptrace(PTRACE_KILL, 0, 0); + // Make the debugger wait() for us + state = RUNNING; } long Process::ptrace(int req, void *addr, void *data) -- 2.43.0