void DebugCLI::locals() { Atom* ptr; int count, line; SourceInfo* src; DebugFrame* frame = core->debugger()->frameAt(0); // source information frame->sourceLocation(src, line); // method MethodInfo* info = functionFor(src, line); if (info) { frame->locals(ptr, count); for(int i=0; i<count; i++) { // write out the name Stringp nm = info->getLocalName(i); if (nm != core->kundefined) core->console << nm; else core->console << "<local_" << i << ">"; core->console << " = " << core->format(*ptr++) << "\n"; } } }
void DebugCLI::locals() { Atom* ptr; int count, line; SourceInfo* src; DebugFrame* frame = core->debugger->frameAt(0); // source information frame->sourceLocation(src, line); // method MethodInfo* info = functionFor(src, line); if (info) { frame->arguments(ptr, count); for(int i=0; i<count; i++) { // write out the name if (info && (info->getLocalName(i) != core->kundefined) ) core->console << info->getLocalName(i) << " = "; core->console << core->format(*ptr++); //if (i<count-1) core->console << "\n"; } } }
void DebugCLI::bt() { //core->stackTrace->dump(core->console); //core->console << '\n'; // obtain information about each frame int frameCount = core->debugger()->frameCount(); for(int k=0; k<frameCount; k++) { Atom* ptr; int count, line; SourceInfo* src; DebugFrame* frame = core->debugger()->frameAt(k); // source information frame->sourceLocation(src, line); core->console << "#" << k << " "; // this Atom a = nullObjectAtom; frame->dhis(a); core->console << core->format(a) << "."; // method MethodInfo* info = functionFor(src, line); if (info) core->console << info->getMethodName(); else core->console << "<unknown>"; core->console << "("; // dump args frame->arguments(ptr, count); for(int i=0; i<count; i++) { // write out the name Stringp nm = info->getArgName(i); if (info && (nm != core->kundefined)) core->console << nm << "="; core->console << core->format(*ptr++); if (i<count-1) core->console << ","; } core->console << ") at "; if (src) core->console << src->name(); else core->console << "???"; core->console << ":" << (line) << "\n"; } }
void DebugCLI::set() { const char* what = nextToken(); const char* equ = nextToken(); const char* to = nextToken(); if (!to || !equ || !what || *equ != '=') { core->console << " Bad format, should be: 'set {variable} = {value}' "; } else { // look for the varable in our locals or args. Atom* ptr; int count, line; SourceInfo* src; DebugFrame* frame = core->debugger->frameAt(0); // source information frame->sourceLocation(src, line); if (!src) { core->console << "Unable to locate debug information for current source file, so no local or argument names known"; return; } // method MethodInfo* info = functionFor(src, line); if (!info) { core->console << "Unable to find method debug information, so no local or argument names known"; return; } frame->arguments(ptr, count); for(int i=0; i<count; i++) { Stringp arg = info->getArgName(i); if (arg->Equals(what)) { // match! Atom a = ease2Atom(to, ptr[i]); if (a == undefinedAtom) core->console << " Type mismatch : current value is " << core->format(ptr[i]); else frame->setArgument(i, a); return; } } frame->locals(ptr, count); for(int i=0; i<count; i++) { Stringp local = info->getLocalName(i); if ( local->Equals(what)) { // match! Atom a = ease2Atom(to, ptr[i]); if (a == undefinedAtom) core->console << " Type mismatch : current value is " << core->format(ptr[i]); else frame->setLocal(i, a); return; } } } }