static const Func* arGetContextFunc(const ActRec* ar) { if (ar == nullptr) { return nullptr; } if (ar->m_func->isPseudoMain() || ar->m_func->isBuiltin()) { // Pseudomains inherit the context of their caller auto const context = g_context.getNoCheck(); ar = context->getPrevVMState(ar); while (ar != nullptr && (ar->m_func->isPseudoMain() || ar->m_func->isBuiltin())) { ar = context->getPrevVMState(ar); } if (ar == nullptr) { return nullptr; } } return ar->m_func; }
int DebuggerProxy::getRealStackDepth() { TRACE(2, "DebuggerProxy::getRealStackDepth\n"); int depth = 0; auto const context = g_context.getNoCheck(); auto fp = vmfp(); if (!fp) return 0; while (fp != nullptr) { fp = context->getPrevVMState(fp, nullptr, nullptr); depth++; } return depth; }