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"
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);
}
}
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)