Stringp Debugger::methodNameAt(DebugStackFrame* frame) { if (frame == NULL) return NULL; int line; SourceInfo* src = NULL; // source information frame->sourceLocation(src, line); MethodInfo* info = functionFor(src, line, frame); return info ? info->getMethodName() : NULL; }
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"; } }