Lines Matching defs:pDbgc

181 static int dbgcProcessLog(PDBGC pDbgc);
189 * @param pDbgc The debug console instance.
195 int dbgcSymbolGet(PDBGC pDbgc, const char *pszSymbol, DBGCVARTYPE enmType, PDBGCVAR pResult)
202 PCDBGCSYM pSymDesc = dbgcLookupRegisterSymbol(pDbgc, pszSymbol);
207 return pSymDesc->pfnGet(pSymDesc, &pDbgc->CmdHlp, enmType, pResult);
249 rc = dbgcOpRegister(pDbgc, &Var, DBGCVAR_CAT_ANY, pResult);
251 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pResult, enmType, false /*fConvSyms*/, pResult);
264 rc = DBGFR3AsSymbolByName(pDbgc->pUVM, pDbgc->hDbgAs, pszSymbol, &Symbol, NULL);
295 return DBGCCmdHlpConvert(&pDbgc->CmdHlp, pResult, enmType, false /*fConvSyms*/, pResult);
311 * @param pDbgc Debugger console instance data.
314 static int dbgcProcessCommands(PDBGC pDbgc, bool fNoExecute)
319 while (pDbgc->cInputLines)
324 if (pDbgc->fLog)
326 rc = dbgcProcessLog(pDbgc);
331 if (pDbgc->iRead == pDbgc->iWrite)
333 AssertMsgFailed(("The input buffer is empty while cInputLines=%d!\n", pDbgc->cInputLines));
334 pDbgc->cInputLines = 0;
342 char *psz = &pDbgc->achInput[pDbgc->iRead];
343 char *pszTrg = &pDbgc->achScratch[0];
346 if (psz == &pDbgc->achInput[sizeof(pDbgc->achInput)])
347 psz = &pDbgc->achInput[0];
349 if (psz == &pDbgc->achInput[pDbgc->iWrite])
351 AssertMsgFailed(("The buffer contains no commands while cInputLines=%d!\n", pDbgc->cInputLines));
352 pDbgc->cInputLines = 0;
363 pDbgc->iRead = psz - &pDbgc->achInput[0];
365 pDbgc->cInputLines--;
370 pDbgc->pszScratch = pszTrg + 1;
371 pDbgc->iArg = 0;
372 rc = dbgcEvalCommand(pDbgc, &pDbgc->achScratch[0], pszTrg - &pDbgc->achScratch[0] - 1, fNoExecute);
389 * @param pDbgc Debugger console instance data.
391 static int dbgcInputOverflow(PDBGC pDbgc)
396 if (!pDbgc->fInputOverflow)
398 pDbgc->fInputOverflow = true;
399 pDbgc->iRead = pDbgc->iWrite = 0;
400 pDbgc->cInputLines = 0;
401 pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "Input overflow!!\n");
408 while (pDbgc->pBack->pfnInput(pDbgc->pBack, 0))
411 int rc = pDbgc->pBack->pfnRead(pDbgc->pBack, &pDbgc->achInput[0], sizeof(pDbgc->achInput) - 1, &cbRead);
414 char *psz = (char *)memchr(&pDbgc->achInput[0], '\n', cbRead);
417 pDbgc->fInputOverflow = false;
418 pDbgc->iRead = psz - &pDbgc->achInput[0] + 1;
419 pDbgc->iWrite = (unsigned)cbRead;
420 pDbgc->cInputLines = 0;
435 * @param pDbgc Debugger console instance data.
437 static int dbgcInputRead(PDBGC pDbgc)
450 if (pDbgc->iWrite > pDbgc->iRead)
451 cbLeft = sizeof(pDbgc->achInput) - pDbgc->iWrite - (pDbgc->iRead == 0);
453 cbLeft = pDbgc->iRead - pDbgc->iWrite - 1;
457 if (!pDbgc->cInputLines)
458 rc = dbgcInputOverflow(pDbgc);
467 rc = pDbgc->pBack->pfnRead(pDbgc->pBack, &achRead[0], RT_MIN(cbLeft, sizeof(achRead)), &cbRead);
489 if (pDbgc->iRead != pDbgc->iWrite)
491 unsigned iWriteUndo = pDbgc->iWrite;
492 if (pDbgc->iWrite)
493 pDbgc->iWrite--;
495 pDbgc->iWrite = sizeof(pDbgc->achInput) - 1;
497 if (pDbgc->achInput[pDbgc->iWrite] == '\n')
498 pDbgc->iWrite = iWriteUndo;
511 case '\n': pDbgc->cInputLines++; break;
515 pDbgc->achInput[pDbgc->iWrite] = ch;
516 if (++pDbgc->iWrite >= sizeof(pDbgc->achInput))
517 pDbgc->iWrite = 0;
523 pDbgc->achInput[pDbgc->iWrite] = '\0';
524 } while (pDbgc->pBack->pfnInput(pDbgc->pBack, 0));
534 * @param pDbgc Debugger console instance data.
537 int dbgcProcessInput(PDBGC pDbgc, bool fNoExecute)
542 int rc = dbgcInputRead(pDbgc);
549 if (pDbgc->cInputLines)
551 pDbgc->pBack->pfnSetReady(pDbgc->pBack, false);
552 pDbgc->fReady = false;
553 rc = dbgcProcessCommands(pDbgc, fNoExecute);
555 pDbgc->fReady = true;
558 && pDbgc->iRead == pDbgc->iWrite
559 && pDbgc->fReady)
560 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "VBoxDbg> ");
563 && pDbgc->fReady)
564 pDbgc->pBack->pfnSetReady(pDbgc->pBack, true);
568 pDbgc->iRead = pDbgc->iWrite;
601 * @param pDbgc DBGC Instance data.
604 static int dbgcProcessEvent(PDBGC pDbgc, PCDBGFEVENT pEvent)
609 if (pDbgc->fLog)
611 int rc = dbgcProcessLog(pDbgc);
619 pDbgc->pszScratch = &pDbgc->achInput[0];
620 pDbgc->iArg = 0;
630 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: VM %p is halted! (%s)\n",
631 pDbgc->pVM, dbgcGetEventCtx(pEvent->enmCtx));
632 pDbgc->fRegCtxGuest = true; /* we're always in guest context when halted. */
634 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
644 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbf event: Fatal error! (%s)\n",
646 pDbgc->fRegCtxGuest = false; /* fatal errors are always in hypervisor. */
648 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
655 bool fRegCtxGuest = pDbgc->fRegCtxGuest;
656 pDbgc->fRegCtxGuest = pEvent->enmType == DBGFEVENT_BREAKPOINT;
658 rc = dbgcBpExec(pDbgc, pEvent->u.Bp.iBp);
662 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: Unknown breakpoint %u! (%s)\n",
667 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: Breakpoint %u! (%s)\n",
672 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: Breakpoint %u! Command too long to execute! (%s)\n",
679 if (RT_SUCCESS(rc) && DBGFR3IsHalted(pDbgc->pUVM))
680 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
682 pDbgc->fRegCtxGuest = fRegCtxGuest;
689 pDbgc->fRegCtxGuest = pEvent->enmType == DBGFEVENT_STEPPED;
691 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: Single step! (%s)\n", dbgcGetEventCtx(pEvent->enmCtx));
693 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
699 pDbgc->fRegCtxGuest = false;
701 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL,
710 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
716 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL,
727 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL,
731 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");
738 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf/dbgc error: Invalid command event!\n");
744 pDbgc->fReady = false;
745 pDbgc->pBack->pfnSetReady(pDbgc->pBack, false);
746 pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\nVM is powering off!\n");
755 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf/dbgc error: Unknown event %d!\n", pEvent->enmType);
765 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "VBoxDbg> ");
766 pDbgc->fReady = true;
768 pDbgc->pBack->pfnSetReady(pDbgc->pBack, true);
778 * The caller must not call function this unless pDbgc->fLog is set.
781 * @param pDbgc Debugger console instance data.
783 static int dbgcProcessLog(PDBGC pDbgc)
786 NOREF(pDbgc);
795 PDBGC pDbgc = (PDBGC)pvUser;
796 pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "%s", pszMsg);
804 * @param pDbgc Pointer to the debugger console instance data.
806 int dbgcRun(PDBGC pDbgc)
811 pDbgc->fReady = true;
812 pDbgc->pBack->pfnSetReady(pDbgc->pBack, true);
825 if (pDbgc->pUVM)
826 rc = DBGFR3QueryWaitable(pDbgc->pUVM);
834 rc = DBGFR3EventWait(pDbgc->pUVM, pDbgc->fLog ? 1 : 32, &pEvent);
837 rc = dbgcProcessEvent(pDbgc, pEvent);
847 if (pDbgc->pBack->pfnInput(pDbgc->pBack, 0))
849 rc = dbgcProcessInput(pDbgc, false /* fNoExecute */);
859 if (pDbgc->pBack->pfnInput(pDbgc->pBack, pDbgc->fLog ? 1 : 1000))
861 rc = dbgcProcessInput(pDbgc, false /* fNoExecute */);
872 if (pDbgc->fLog)
874 rc = dbgcProcessLog(pDbgc);
903 PDBGC pDbgc = (PDBGC)RTMemAllocZ(sizeof(*pDbgc));
904 if (!pDbgc)
907 dbgcInitCmdHlp(pDbgc);
908 pDbgc->pBack = pBack;
909 pDbgc->pVM = NULL;
910 pDbgc->pUVM = NULL;
911 pDbgc->idCpu = 0;
912 pDbgc->hDbgAs = DBGF_AS_GLOBAL;
913 pDbgc->pszEmulation = "CodeView/WinDbg";
914 pDbgc->paEmulationCmds = &g_aCmdsCodeView[0];
915 pDbgc->cEmulationCmds = g_cCmdsCodeView;
916 pDbgc->paEmulationFuncs = &g_aFuncsCodeView[0];
917 pDbgc->cEmulationFuncs = g_cFuncsCodeView;
918 //pDbgc->fLog = false;
919 pDbgc->fRegCtxGuest = true;
920 pDbgc->fRegTerse = true;
921 //pDbgc->cPagingHierarchyDumps = 0;
922 //pDbgc->DisasmPos = {0};
923 //pDbgc->SourcePos = {0};
924 //pDbgc->DumpPos = {0};
925 pDbgc->pLastPos = &pDbgc->DisasmPos;
926 //pDbgc->cbDumpElement = 0;
927 //pDbgc->cVars = 0;
928 //pDbgc->paVars = NULL;
929 //pDbgc->pPlugInHead = NULL;
930 //pDbgc->pFirstBp = NULL;
931 //pDbgc->abSearch = {0};
932 //pDbgc->cbSearch = 0;
933 pDbgc->cbSearchUnit = 1;
934 pDbgc->cMaxSearchHits = 1;
935 //pDbgc->SearchAddr = {0};
936 //pDbgc->cbSearchRange = 0;
938 //pDbgc->uInputZero = 0;
939 //pDbgc->iRead = 0;
940 //pDbgc->iWrite = 0;
941 //pDbgc->cInputLines = 0;
942 //pDbgc->fInputOverflow = false;
943 pDbgc->fReady = true;
944 pDbgc->pszScratch = &pDbgc->achScratch[0];
945 //pDbgc->iArg = 0;
946 //pDbgc->rcOutput = 0;
947 //pDbgc->rcCmd = 0;
951 *ppDbgc = pDbgc;
958 * @param pDbgc Pointer to the debugger console instance data.
960 void dbgcDestroy(PDBGC pDbgc)
962 AssertPtr(pDbgc);
965 if (pDbgc->fLog)
971 dbgcPlugInUnloadAll(pDbgc);
974 if (pDbgc->pUVM)
975 DBGFR3Detach(pDbgc->pUVM);
978 RTMemFree(pDbgc);
1014 PDBGC pDbgc;
1015 int rc = dbgcCreate(&pDbgc, pBack, fFlags);
1019 pDbgc->hDbgAs = DBGF_AS_RC_AND_GC_GLOBAL;
1024 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL,
1035 pDbgc->pVM = pVM;
1036 pDbgc->pUVM = pUVM;
1037 pDbgc->idCpu = 0;
1038 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL,
1040 , pDbgc->pVM, pDbgc->idCpu);
1043 rc = pDbgc->CmdHlp.pfnVBoxError(&pDbgc->CmdHlp, rc, "When trying to attach to VM %p\n", pDbgc->pVM);
1052 dbgcPlugInAutoLoad(pDbgc);
1053 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "VBoxDbg> ");
1063 int rc2 = RTDbgCfgSetLogCallback(hDbgCfg, dbgcDbgCfgLogCallback, pDbgc);
1077 rc = dbgcRun(pDbgc);
1091 pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\nDBGCCreate error: %Rrc\n", rc);
1097 dbgcDestroy(pDbgc);