*/
#include <signal.h>
+#include <readline/readline.h>
#include <msp/core/except.h>
#include <msp/io/file.h>
#include <msp/io/print.h>
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_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);
}
}