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::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"; } } }
Stringp Debugger::autoVarName(DebugStackFrame* frame, int index, AutoVarKind kind) { if (frame == NULL) return NULL; int line; SourceInfo* src = NULL; // source information frame->sourceLocation(src, line); MethodInfo* info = functionFor(src, line, frame); if (!info) return NULL; switch (kind) { case AUTO_LOCAL: return info->getLocalName(index); case AUTO_ARGUMENT: return info->getArgName(index); case AUTO_THIS: return NULL; default: AvmAssert(false); } return NULL; }
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; } } } }