Changeset 86098 in vbox for trunk/src/VBox/Debugger
- Timestamp:
- Sep 13, 2020 7:17:19 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 140330
- Location:
- trunk/src/VBox/Debugger
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Debugger/DBGCCmdHlp.cpp
r84653 r86098 1347 1347 1348 1348 /** 1349 * @interface_method_impl{DBGCCMDHLP,pfnRegPrintf} 1350 */ 1351 static DECLCALLBACK(int) dbgcHlpRegPrintf(PDBGCCMDHLP pCmdHlp, VMCPUID idCpu, int f64BitMode, bool fTerse) 1352 { 1353 PDBGC pDbgc = DBGC_CMDHLP2DBGC(pCmdHlp); 1354 char szDisAndRegs[8192]; 1355 int rc; 1356 1357 if (f64BitMode < 0) 1358 f64BitMode = DBGFR3CpuIsIn64BitCode(pDbgc->pUVM, idCpu); 1359 1360 if (fTerse) 1361 { 1362 if (f64BitMode) 1363 rc = DBGFR3RegPrintf(pDbgc->pUVM, idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 1364 "u %016VR{rip} L 0\n" 1365 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 1366 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 1367 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 1368 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 1369 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 1370 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} rflags=%08VR{rflags}\n"); 1371 else 1372 rc = DBGFR3RegPrintf(pDbgc->pUVM, idCpu, szDisAndRegs, sizeof(szDisAndRegs), 1373 "u %04VR{cs}:%08VR{eip} L 0\n" 1374 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 1375 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 1376 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} eflags=%08VR{eflags}\n"); 1377 } 1378 else 1379 { 1380 if (f64BitMode) 1381 rc = DBGFR3RegPrintf(pDbgc->pUVM, idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 1382 "u %016VR{rip} L 0\n" 1383 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 1384 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 1385 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 1386 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 1387 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 1388 "cs={%04VR{cs} base=%016VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} cr0=%016VR{cr0}\n" 1389 "ds={%04VR{ds} base=%016VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} cr2=%016VR{cr2}\n" 1390 "es={%04VR{es} base=%016VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} cr3=%016VR{cr3}\n" 1391 "fs={%04VR{fs} base=%016VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr4=%016VR{cr4}\n" 1392 "gs={%04VR{gs} base=%016VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr8=%016VR{cr8}\n" 1393 "ss={%04VR{ss} base=%016VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" 1394 "dr0=%016VR{dr0} dr1=%016VR{dr1} dr2=%016VR{dr2} dr3=%016VR{dr3}\n" 1395 "dr6=%016VR{dr6} dr7=%016VR{dr7}\n" 1396 "gdtr=%016VR{gdtr_base}:%04VR{gdtr_lim} idtr=%016VR{idtr_base}:%04VR{idtr_lim} rflags=%08VR{rflags}\n" 1397 "ldtr={%04VR{ldtr} base=%016VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%08VR{ldtr_attr}}\n" 1398 "tr ={%04VR{tr} base=%016VR{tr_base} limit=%08VR{tr_lim} flags=%08VR{tr_attr}}\n" 1399 " sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 1400 " efer=%016VR{efer}\n" 1401 " pat=%016VR{pat}\n" 1402 " sf_mask=%016VR{sf_mask}\n" 1403 "krnl_gs_base=%016VR{krnl_gs_base}\n" 1404 " lstar=%016VR{lstar}\n" 1405 " star=%016VR{star} cstar=%016VR{cstar}\n" 1406 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 1407 ); 1408 else 1409 rc = DBGFR3RegPrintf(pDbgc->pUVM, idCpu, szDisAndRegs, sizeof(szDisAndRegs), 1410 "u %04VR{cs}:%08VR{eip} L 0\n" 1411 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 1412 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 1413 "cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} dr0=%08VR{dr0} dr1=%08VR{dr1}\n" 1414 "ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} dr2=%08VR{dr2} dr3=%08VR{dr3}\n" 1415 "es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} dr6=%08VR{dr6} dr7=%08VR{dr7}\n" 1416 "fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr0=%08VR{cr0} cr2=%08VR{cr2}\n" 1417 "gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr3=%08VR{cr3} cr4=%08VR{cr4}\n" 1418 "ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}} cr8=%08VR{cr8}\n" 1419 "gdtr=%08VR{gdtr_base}:%04VR{gdtr_lim} idtr=%08VR{idtr_base}:%04VR{idtr_lim} eflags=%08VR{eflags}\n" 1420 "ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" 1421 "tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" 1422 "sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 1423 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 1424 ); 1425 } 1426 if (RT_FAILURE(rc)) 1427 return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); 1428 char *pszRegs = strchr(szDisAndRegs, '\n'); 1429 *pszRegs++ = '\0'; 1430 rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); 1431 1432 /* 1433 * Disassemble one instruction at cs:[r|e]ip. 1434 */ 1435 if (!f64BitMode && strstr(pszRegs, " vm ")) /* a bit ugly... */ 1436 return pCmdHlp->pfnExec(pCmdHlp, "uv86 %s", szDisAndRegs + 2); 1437 return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); 1438 } 1439 1440 1441 /** 1349 1442 * Initializes the Command Helpers for a DBGC instance. 1350 1443 * … … 1376 1469 pDbgc->CmdHlp.pfnGetCurrentCpu = dbgcHlpGetCurrentCpu; 1377 1470 pDbgc->CmdHlp.pfnGetCpuMode = dbgcHlpGetCpuMode; 1471 pDbgc->CmdHlp.pfnRegPrintf = dbgcHlpRegPrintf; 1378 1472 pDbgc->CmdHlp.u32EndMarker = DBGCCMDHLP_MAGIC; 1379 1473 } -
trunk/src/VBox/Debugger/DBGCCommands.cpp
r83088 r86098 233 233 { 1, 1, DBGCVAR_CAT_SYMBOL, 0, "var", "Variable name." }, 234 234 { 1, 1, DBGCVAR_CAT_ANY, 0, "value", "Value to assign to the variable." }, 235 }; 236 237 /** 'stop' arguments */ 238 static const DBGCVARDESC g_aArgStop[] = 239 { 240 /* cTimesMin, cTimesMax, enmCategory, fFlags, pszName, pszDescription */ 241 { 0, 1, DBGCVAR_CAT_NUMBER, 0, "idCpu", "CPU ID." }, 235 242 }; 236 243 … … 298 305 { "set", 2, 2, &g_aArgSet[0], RT_ELEMENTS(g_aArgSet), 0, dbgcCmdSet, "<var> <value>", "Sets a global variable." }, 299 306 { "showvars", 0, 0, NULL, 0, 0, dbgcCmdShowVars, "", "List all the defined variables." }, 300 { "stop", 0, 0, NULL, 0, 0, dbgcCmdStop, "", "Stop execution." },307 { "stop", 0, 1, &g_aArgStop[0], RT_ELEMENTS(g_aArgStop), 0, dbgcCmdStop, "[idCpu]", "Stop execution either of all or the specified CPU. (The latter is not recommended unless you know exactly what you're doing.)" }, 301 308 { "unload", 1, ~0U, &g_aArgUnload[0], RT_ELEMENTS(g_aArgUnload), 0, dbgcCmdUnload, "<modname1> [modname2..N]", "Unloads one or more modules in the current address space." }, 302 309 { "unloadplugin", 1, ~0U, &g_aArgPlugIn[0], RT_ELEMENTS(g_aArgPlugIn), 0, dbgcCmdUnloadPlugIn, "<plugin1> [plugin2..N]", "Unloads one or more plugins." }, … … 938 945 static DECLCALLBACK(int) dbgcCmdStop(PCDBGCCMD pCmd, PDBGCCMDHLP pCmdHlp, PUVM pUVM, PCDBGCVAR paArgs, unsigned cArgs) 939 946 { 940 /* 941 * Check if the VM is halted or not before trying to halt it. 942 */ 943 int rc; 944 if (DBGFR3IsHalted(pUVM)) 945 rc = DBGCCmdHlpPrintf(pCmdHlp, "warning: The VM is already halted...\n"); 947 DBGC_CMDHLP_REQ_UVM_RET(pCmdHlp, pCmd, pUVM); 948 949 /* 950 * Parse arguments. 951 */ 952 VMCPUID idCpu = VMCPUID_ALL; 953 if (cArgs == 1) 954 { 955 VMCPUID cCpus = DBGFR3CpuGetCount(pUVM); 956 if (paArgs[0].u.u64Number >= cCpus) 957 return DBGCCmdHlpFail(pCmdHlp, pCmd, "idCpu %RU64 is out of range! Highest valid ID is %u.\n", 958 paArgs[0].u.u64Number, cCpus - 1); 959 idCpu = (VMCPUID)paArgs[0].u.u64Number; 960 } 946 961 else 947 { 948 rc = DBGFR3Halt(pUVM); 949 if (RT_SUCCESS(rc)) 962 Assert(cArgs == 0); 963 964 /* 965 * Try halt the VM or VCpu. 966 */ 967 int rc = DBGFR3Halt(pUVM, idCpu); 968 if (RT_SUCCESS(rc)) 969 { 970 Assert(rc == VINF_SUCCESS || rc == VWRN_DBGF_ALREADY_HALTED); 971 if (rc != VWRN_DBGF_ALREADY_HALTED) 950 972 rc = VWRN_DBGC_CMD_PENDING; 973 else if (idCpu == VMCPUID_ALL) 974 rc = DBGCCmdHlpPrintf(pCmdHlp, "warning: The VM is already halted...\n"); 951 975 else 952 rc = DBGCCmdHlpVBoxError(pCmdHlp, rc, "Executing DBGFR3Halt()."); 953 } 954 955 NOREF(pCmd); NOREF(paArgs); NOREF(cArgs); 976 rc = DBGCCmdHlpPrintf(pCmdHlp, "warning: CPU %u is already halted...\n", idCpu); 977 } 978 else 979 rc = DBGCCmdHlpVBoxError(pCmdHlp, rc, "Executing DBGFR3Halt()."); 980 956 981 return rc; 957 982 } -
trunk/src/VBox/Debugger/DBGCEmulateCodeView.cpp
r83082 r86098 237 237 { 1, 1, DBGCVAR_CAT_POINTER, 0, "address", "Address where to write." }, 238 238 { 1, ~0U, DBGCVAR_CAT_NUMBER, 0, "value", "Value to write." }, 239 }; 240 241 242 /** 'g' arguments. */ 243 static const DBGCVARDESC g_aArgGo[] = 244 { 245 /* cTimesMin, cTimesMax, enmCategory, fFlags, pszName, pszDescription */ 246 { 0, 1, DBGCVAR_CAT_NUMBER, 0, "idCpu", "CPU ID." }, 239 247 }; 240 248 … … 425 433 { "ed", 2, 2, &g_aArgEditMem[0], RT_ELEMENTS(g_aArgEditMem), 0, dbgcCmdEditMem, "<addr> <value>", "Write a 4-byte value to memory." }, 426 434 { "eq", 2, 2, &g_aArgEditMem[0], RT_ELEMENTS(g_aArgEditMem), 0, dbgcCmdEditMem, "<addr> <value>", "Write a 8-byte value to memory." }, 427 { "g", 0, 0, NULL, 0, 0, dbgcCmdGo, "", "Continue execution." },435 { "g", 0, 1, &g_aArgGo[0], RT_ELEMENTS(g_aArgGo), 0, dbgcCmdGo, "[idCpu]", "Continue execution of all or the specified CPU. (The latter is not recommended unless you know exactly what you're doing.)" }, 428 436 { "gu", 0, 0, NULL, 0, 0, dbgcCmdGoUp, "", "Go up - continue execution till after return." }, 429 437 { "k", 0, 0, NULL, 0, 0, dbgcCmdStack, "", "Callstack." }, … … 651 659 652 660 /* 653 * Check if the VM is halted or not before trying to resume it. 654 */ 655 if (!DBGFR3IsHalted(pUVM)) 656 return DBGCCmdHlpFail(pCmdHlp, pCmd, "The VM is already running"); 657 658 int rc = DBGFR3Resume(pUVM); 659 if (RT_FAILURE(rc)) 660 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGFR3Resume"); 661 662 NOREF(paArgs); NOREF(cArgs); 663 return VINF_SUCCESS; 661 * Parse arguments. 662 */ 663 VMCPUID idCpu = VMCPUID_ALL; 664 if (cArgs == 1) 665 { 666 VMCPUID cCpus = DBGFR3CpuGetCount(pUVM); 667 if (paArgs[0].u.u64Number >= cCpus) 668 return DBGCCmdHlpFail(pCmdHlp, pCmd, "idCpu %RU64 is out of range! Highest valid ID is %u.\n", 669 paArgs[0].u.u64Number, cCpus - 1); 670 idCpu = (VMCPUID)paArgs[0].u.u64Number; 671 } 672 else 673 Assert(cArgs == 0); 674 675 /* 676 * Try resume the VM or CPU. 677 */ 678 int rc = DBGFR3Resume(pUVM, idCpu); 679 if (RT_SUCCESS(rc)) 680 { 681 Assert(rc == VINF_SUCCESS || rc == VWRN_DBGF_ALREADY_RUNNING); 682 if (rc != VWRN_DBGF_ALREADY_RUNNING) 683 return VINF_SUCCESS; 684 if (idCpu == VMCPUID_ALL) 685 return DBGCCmdHlpFail(pCmdHlp, pCmd, "The VM is already running"); 686 return DBGCCmdHlpFail(pCmdHlp, pCmd, "CPU %u is already running", idCpu); 687 } 688 return DBGCCmdHlpFailRc(pCmdHlp, pCmd, rc, "DBGFR3Resume"); 664 689 } 665 690 … … 2466 2491 || ( strcmp(pCmd->pszCmd, "rg32") != 0 2467 2492 && DBGFR3CpuIsIn64BitCode(pUVM, pDbgc->idCpu)); 2468 char szDisAndRegs[8192]; 2469 int rc; 2470 2471 if (pDbgc->fRegTerse) 2472 { 2473 if (f64BitMode) 2474 rc = DBGFR3RegPrintf(pUVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 2475 "u %016VR{rip} L 0\n" 2476 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 2477 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 2478 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 2479 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 2480 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 2481 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} rflags=%08VR{rflags}\n"); 2482 else 2483 rc = DBGFR3RegPrintf(pUVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), 2484 "u %04VR{cs}:%08VR{eip} L 0\n" 2485 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 2486 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 2487 "cs=%04VR{cs} ds=%04VR{ds} es=%04VR{es} fs=%04VR{fs} gs=%04VR{gs} ss=%04VR{ss} eflags=%08VR{eflags}\n"); 2488 } 2489 else 2490 { 2491 if (f64BitMode) 2492 rc = DBGFR3RegPrintf(pUVM, pDbgc->idCpu, &szDisAndRegs[0], sizeof(szDisAndRegs), 2493 "u %016VR{rip} L 0\n" 2494 "rax=%016VR{rax} rbx=%016VR{rbx} rcx=%016VR{rcx} rdx=%016VR{rdx}\n" 2495 "rsi=%016VR{rsi} rdi=%016VR{rdi} r8 =%016VR{r8} r9 =%016VR{r9}\n" 2496 "r10=%016VR{r10} r11=%016VR{r11} r12=%016VR{r12} r13=%016VR{r13}\n" 2497 "r14=%016VR{r14} r15=%016VR{r15} %VRF{rflags}\n" 2498 "rip=%016VR{rip} rsp=%016VR{rsp} rbp=%016VR{rbp}\n" 2499 "cs={%04VR{cs} base=%016VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} cr0=%016VR{cr0}\n" 2500 "ds={%04VR{ds} base=%016VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} cr2=%016VR{cr2}\n" 2501 "es={%04VR{es} base=%016VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} cr3=%016VR{cr3}\n" 2502 "fs={%04VR{fs} base=%016VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr4=%016VR{cr4}\n" 2503 "gs={%04VR{gs} base=%016VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr8=%016VR{cr8}\n" 2504 "ss={%04VR{ss} base=%016VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}}\n" 2505 "dr0=%016VR{dr0} dr1=%016VR{dr1} dr2=%016VR{dr2} dr3=%016VR{dr3}\n" 2506 "dr6=%016VR{dr6} dr7=%016VR{dr7}\n" 2507 "gdtr=%016VR{gdtr_base}:%04VR{gdtr_lim} idtr=%016VR{idtr_base}:%04VR{idtr_lim} rflags=%08VR{rflags}\n" 2508 "ldtr={%04VR{ldtr} base=%016VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%08VR{ldtr_attr}}\n" 2509 "tr ={%04VR{tr} base=%016VR{tr_base} limit=%08VR{tr_lim} flags=%08VR{tr_attr}}\n" 2510 " sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 2511 " efer=%016VR{efer}\n" 2512 " pat=%016VR{pat}\n" 2513 " sf_mask=%016VR{sf_mask}\n" 2514 "krnl_gs_base=%016VR{krnl_gs_base}\n" 2515 " lstar=%016VR{lstar}\n" 2516 " star=%016VR{star} cstar=%016VR{cstar}\n" 2517 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 2518 ); 2519 else 2520 rc = DBGFR3RegPrintf(pUVM, pDbgc->idCpu, szDisAndRegs, sizeof(szDisAndRegs), 2521 "u %04VR{cs}:%08VR{eip} L 0\n" 2522 "eax=%08VR{eax} ebx=%08VR{ebx} ecx=%08VR{ecx} edx=%08VR{edx} esi=%08VR{esi} edi=%08VR{edi}\n" 2523 "eip=%08VR{eip} esp=%08VR{esp} ebp=%08VR{ebp} %VRF{eflags}\n" 2524 "cs={%04VR{cs} base=%08VR{cs_base} limit=%08VR{cs_lim} flags=%04VR{cs_attr}} dr0=%08VR{dr0} dr1=%08VR{dr1}\n" 2525 "ds={%04VR{ds} base=%08VR{ds_base} limit=%08VR{ds_lim} flags=%04VR{ds_attr}} dr2=%08VR{dr2} dr3=%08VR{dr3}\n" 2526 "es={%04VR{es} base=%08VR{es_base} limit=%08VR{es_lim} flags=%04VR{es_attr}} dr6=%08VR{dr6} dr7=%08VR{dr7}\n" 2527 "fs={%04VR{fs} base=%08VR{fs_base} limit=%08VR{fs_lim} flags=%04VR{fs_attr}} cr0=%08VR{cr0} cr2=%08VR{cr2}\n" 2528 "gs={%04VR{gs} base=%08VR{gs_base} limit=%08VR{gs_lim} flags=%04VR{gs_attr}} cr3=%08VR{cr3} cr4=%08VR{cr4}\n" 2529 "ss={%04VR{ss} base=%08VR{ss_base} limit=%08VR{ss_lim} flags=%04VR{ss_attr}} cr8=%08VR{cr8}\n" 2530 "gdtr=%08VR{gdtr_base}:%04VR{gdtr_lim} idtr=%08VR{idtr_base}:%04VR{idtr_lim} eflags=%08VR{eflags}\n" 2531 "ldtr={%04VR{ldtr} base=%08VR{ldtr_base} limit=%08VR{ldtr_lim} flags=%04VR{ldtr_attr}}\n" 2532 "tr ={%04VR{tr} base=%08VR{tr_base} limit=%08VR{tr_lim} flags=%04VR{tr_attr}}\n" 2533 "sysenter={cs=%04VR{sysenter_cs} eip=%08VR{sysenter_eip} esp=%08VR{sysenter_esp}}\n" 2534 "fcw=%04VR{fcw} fsw=%04VR{fsw} ftw=%04VR{ftw} mxcsr=%04VR{mxcsr} mxcsr_mask=%04VR{mxcsr_mask}\n" 2535 ); 2536 } 2537 if (RT_FAILURE(rc)) 2538 return DBGCCmdHlpVBoxError(pCmdHlp, rc, "DBGFR3RegPrintf failed"); 2539 char *pszRegs = strchr(szDisAndRegs, '\n'); 2540 *pszRegs++ = '\0'; 2541 rc = DBGCCmdHlpPrintf(pCmdHlp, "%s", pszRegs); 2542 2543 /* 2544 * Disassemble one instruction at cs:[r|e]ip. 2545 */ 2546 if (!f64BitMode && strstr(pszRegs, " vm ")) /* a bit ugly... */ 2547 return pCmdHlp->pfnExec(pCmdHlp, "uv86 %s", szDisAndRegs + 2); 2548 return pCmdHlp->pfnExec(pCmdHlp, "%s", szDisAndRegs); 2493 return DBGCCmdHlpRegPrintf(pCmdHlp, pDbgc->idCpu, f64BitMode, pDbgc->fRegTerse); 2549 2494 } 2550 2495 return dbgcCmdRegCommon(pCmd, pCmdHlp, pUVM, paArgs, cArgs, ""); -
trunk/src/VBox/Debugger/DBGCGdbRemoteStub.cpp
r85367 r86098 1565 1565 case 'c': 1566 1566 { 1567 if (DBGFR3IsHalted(pThis->Dbgc.pUVM ))1568 DBGFR3Resume(pThis->Dbgc.pUVM );1567 if (DBGFR3IsHalted(pThis->Dbgc.pUVM, VMCPUID_ALL)) 1568 DBGFR3Resume(pThis->Dbgc.pUVM, VMCPUID_ALL); 1569 1569 break; 1570 1570 } … … 1581 1581 case 't': 1582 1582 { 1583 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM ))1584 rc = DBGFR3Halt(pThis->Dbgc.pUVM );1583 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM, VMCPUID_ALL)) 1584 rc = DBGFR3Halt(pThis->Dbgc.pUVM, VMCPUID_ALL); 1585 1585 /* The reply will be send in the event loop. */ 1586 1586 break; … … 1732 1732 case 'c': /* Continue, no response */ 1733 1733 { 1734 if (DBGFR3IsHalted(pThis->Dbgc.pUVM ))1735 DBGFR3Resume(pThis->Dbgc.pUVM );1734 if (DBGFR3IsHalted(pThis->Dbgc.pUVM, VMCPUID_ALL)) 1735 DBGFR3Resume(pThis->Dbgc.pUVM, VMCPUID_ALL); 1736 1736 break; 1737 1737 } … … 2174 2174 { 2175 2175 /* Stop target and send packet to indicate the target has stopped. */ 2176 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM ))2177 rc = DBGFR3Halt(pThis->Dbgc.pUVM );2176 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM, VMCPUID_ALL)) 2177 rc = DBGFR3Halt(pThis->Dbgc.pUVM, VMCPUID_ALL); 2178 2178 /* The reply will be send in the event loop. */ 2179 2179 } … … 2403 2403 break; 2404 2404 } 2405 if (RT_SUCCESS(rc) && DBGFR3IsHalted(pDbgc->pUVM ))2405 if (RT_SUCCESS(rc) && DBGFR3IsHalted(pDbgc->pUVM, VMCPUID_ALL)) 2406 2406 { 2407 2407 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r"); … … 2589 2589 * Wait for a debug event. 2590 2590 */ 2591 PCDBGFEVENT pEvent;2592 rc = DBGFR3EventWait(pThis->Dbgc.pUVM, 32, & pEvent);2591 DBGFEVENT Event; 2592 rc = DBGFR3EventWait(pThis->Dbgc.pUVM, 32, &Event); 2593 2593 if (RT_SUCCESS(rc)) 2594 2594 { 2595 rc = dbgcGdbStubCtxProcessEvent(pThis, pEvent);2595 rc = dbgcGdbStubCtxProcessEvent(pThis, &Event); 2596 2596 if (RT_FAILURE(rc)) 2597 2597 break; … … 2840 2840 //dbgcRunInitScripts(pDbgc); Not yet 2841 2841 2842 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM ))2843 rc = DBGFR3Halt(pThis->Dbgc.pUVM );2842 if (!DBGFR3IsHalted(pThis->Dbgc.pUVM, VMCPUID_ALL)) 2843 rc = DBGFR3Halt(pThis->Dbgc.pUVM, VMCPUID_ALL); 2844 2844 2845 2845 /* -
trunk/src/VBox/Debugger/DBGConsole.cpp
r84708 r86098 648 648 bool fPrintPrompt = true; 649 649 int rc = VINF_SUCCESS; 650 VMCPUID const idCpuSaved = pDbgc->idCpu; 650 651 switch (pEvent->enmType) 651 652 { … … 655 656 case DBGFEVENT_HALT_DONE: 656 657 { 657 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: VM %p is halted! (%s)\n", 658 pDbgc->pVM, dbgcGetEventCtx(pEvent->enmCtx)); 658 /** @todo add option to suppress this on CPUs that aren't selected (like 659 * fRegTerse). */ 660 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: CPU %u has halted! (%s)\n", 661 pEvent->idCpu, pEvent->idCpu, dbgcGetEventCtx(pEvent->enmCtx)); 659 662 if (RT_SUCCESS(rc)) 660 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");663 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 661 664 break; 662 665 } … … 668 671 case DBGFEVENT_FATAL_ERROR: 669 672 { 670 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbf event: Fatal error! (%s)\n", 671 dbgcGetEventCtx(pEvent->enmCtx)); 673 pDbgc->idCpu = pEvent->idCpu; 674 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbf event/%u: Fatal error! (%s)\n", 675 pEvent->idCpu, dbgcGetEventCtx(pEvent->enmCtx)); 672 676 if (RT_SUCCESS(rc)) 673 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");677 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 674 678 break; 675 679 } … … 680 684 case DBGFEVENT_BREAKPOINT_HYPER: 681 685 { 686 pDbgc->idCpu = pEvent->idCpu; 682 687 rc = dbgcBpExec(pDbgc, pEvent->u.Bp.iBp); 683 688 switch (rc) 684 689 { 685 690 case VERR_DBGC_BP_NOT_FOUND: 686 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : Unknown breakpoint %u! (%s)\n",687 pEvent-> u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx));691 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: Unknown breakpoint %u! (%s)\n", 692 pEvent->idCpu, pEvent->u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx)); 688 693 break; 689 694 690 695 case VINF_DBGC_BP_NO_COMMAND: 691 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : Breakpoint %u! (%s)\n",692 pEvent-> u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx));696 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: Breakpoint %u! (%s)\n", 697 pEvent->idCpu, pEvent->u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx)); 693 698 break; 694 699 695 700 case VINF_BUFFER_OVERFLOW: 696 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : Breakpoint %u! Command too long to execute! (%s)\n",697 pEvent-> u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx));701 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: Breakpoint %u! Command too long to execute! (%s)\n", 702 pEvent->idCpu, pEvent->u.Bp.iBp, dbgcGetEventCtx(pEvent->enmCtx)); 698 703 break; 699 704 … … 701 706 break; 702 707 } 703 if (RT_SUCCESS(rc) && DBGFR3IsHalted(pDbgc->pUVM ))708 if (RT_SUCCESS(rc) && DBGFR3IsHalted(pDbgc->pUVM, pEvent->idCpu)) 704 709 { 705 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");710 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 706 711 707 712 /* Set the resume flag to ignore the breakpoint when resuming execution. */ … … 710 715 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r eflags.rf = 1"); 711 716 } 717 else 718 pDbgc->idCpu = idCpuSaved; 712 719 break; 713 720 } … … 716 723 case DBGFEVENT_STEPPED_HYPER: 717 724 { 718 if (!pDbgc->cMultiStepsLeft) 719 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: Single step! (%s)\n", dbgcGetEventCtx(pEvent->enmCtx)); 725 if (!pDbgc->cMultiStepsLeft || pEvent->idCpu != idCpuSaved) 726 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: Single step! (%s)\n", 727 pEvent->idCpu, dbgcGetEventCtx(pEvent->enmCtx)); 720 728 else 721 729 pDbgc->cMultiStepsLeft -= 1; … … 723 731 { 724 732 if (pDbgc->fStepTraceRegs) 725 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");733 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 726 734 else 727 735 { … … 739 747 740 748 /* If multi-stepping, take the next step: */ 741 if (pDbgc->cMultiStepsLeft > 0 )749 if (pDbgc->cMultiStepsLeft > 0 && pEvent->idCpu != idCpuSaved) 742 750 { 743 751 int rc2 = DBGFR3StepEx(pDbgc->pUVM, pDbgc->idCpu, DBGF_STEP_F_INTO, NULL, NULL, 0, pDbgc->uMultiStepStrideLength); … … 747 755 DBGCCmdHlpFailRc(&pDbgc->CmdHlp, pDbgc->pMultiStepCmd, rc2, "DBGFR3StepEx(,,DBGF_STEP_F_INTO,) failed"); 748 756 } 757 else 758 pDbgc->idCpu = pEvent->idCpu; 749 759 break; 750 760 } … … 752 762 case DBGFEVENT_ASSERTION_HYPER: 753 763 { 764 pDbgc->idCpu = pEvent->idCpu; 754 765 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, 755 "\ndbgf event : Hypervisor Assertion! (%s)\n"766 "\ndbgf event/%u: Hypervisor Assertion! (%s)\n" 756 767 "%s" 757 768 "%s" 758 769 "\n", 770 pEvent->idCpu, 759 771 dbgcGetEventCtx(pEvent->enmCtx), 760 772 pEvent->u.Assert.pszMsg1, 761 773 pEvent->u.Assert.pszMsg2); 762 774 if (RT_SUCCESS(rc)) 763 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");775 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 764 776 break; 765 777 } … … 767 779 case DBGFEVENT_DEV_STOP: 768 780 { 781 pDbgc->idCpu = pEvent->idCpu; 769 782 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, 770 783 "\n" 771 "dbgf event : DBGFSTOP (%s)\n"784 "dbgf event/%u: DBGFSTOP (%s)\n" 772 785 "File: %s\n" 773 786 "Line: %d\n" 774 787 "Function: %s\n", 788 pEvent->idCpu, 775 789 dbgcGetEventCtx(pEvent->enmCtx), 776 790 pEvent->u.Src.pszFile, … … 782 796 pEvent->u.Src.pszMessage); 783 797 if (RT_SUCCESS(rc)) 784 rc = pDbgc->CmdHlp.pfnExec(&pDbgc->CmdHlp, "r");798 rc = DBGCCmdHlpRegPrintf(&pDbgc->CmdHlp, pEvent->idCpu, -1, pDbgc->fRegTerse); 785 799 break; 786 800 } … … 816 830 Assert(pEvtDesc->pszDesc); 817 831 Assert(pEvent->u.Generic.cArgs == 1); 818 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : %s no %#llx! (%s)\n",819 pEv tDesc->pszDesc, pEvent->u.Generic.auArgs[0], pEvtDesc->pszName);832 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s no %#llx! (%s)\n", 833 pEvent->idCpu, pEvtDesc->pszDesc, pEvent->u.Generic.auArgs[0], pEvtDesc->pszName); 820 834 } 821 835 else if (pEvtDesc->fFlags & DBGCSXEVT_F_BUGCHECK) … … 826 840 pEvent->u.Generic.auArgs[1], pEvent->u.Generic.auArgs[2], 827 841 pEvent->u.Generic.auArgs[3], pEvent->u.Generic.auArgs[4]); 828 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : %s %s%s!\n%s", pEvtDesc->pszName,829 pEvtDesc->psz Desc ? "- " : "", pEvtDesc->pszDesc ? pEvtDesc->pszDesc: "",830 szDetails);842 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s %s%s!\n%s", pEvent->idCpu, 843 pEvtDesc->pszName, pEvtDesc->pszDesc ? "- " : "", 844 pEvtDesc->pszDesc ? pEvtDesc->pszDesc : "", szDetails); 831 845 } 832 846 else if ( (pEvtDesc->fFlags & DBGCSXEVT_F_TAKE_ARG) … … 836 850 { 837 851 if (pEvtDesc->pszDesc) 838 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : %s - %s!",839 pEv tDesc->pszName, pEvtDesc->pszDesc);852 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s - %s!", 853 pEvent->idCpu, pEvtDesc->pszName, pEvtDesc->pszDesc); 840 854 else 841 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s!", pEvtDesc->pszName); 855 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s!", 856 pEvent->idCpu, pEvtDesc->pszName); 842 857 if (pEvent->u.Generic.cArgs <= 1) 843 858 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, " arg=%#llx\n", pEvent->u.Generic.auArgs[0]); … … 852 867 { 853 868 if (pEvtDesc->pszDesc) 854 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event : %s - %s!\n",855 pEv tDesc->pszName, pEvtDesc->pszDesc);869 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s - %s!\n", 870 pEvent->idCpu, pEvtDesc->pszName, pEvtDesc->pszDesc); 856 871 else 857 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event: %s!\n", pEvtDesc->pszName); 872 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf event/%u: %s!\n", 873 pEvent->idCpu, pEvtDesc->pszName); 858 874 } 859 875 } 860 876 else 861 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf/dbgc error: Unknown event %d!\n", pEvent->enmType); 877 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "\ndbgf/dbgc error: Unknown event %d on CPU %u!\n", 878 pEvent->enmType, pEvent->idCpu); 862 879 break; 863 880 } … … 869 886 if (fPrintPrompt && RT_SUCCESS(rc)) 870 887 { 888 /** @todo add CPU indicator to the prompt if an SMP VM? */ 871 889 rc = pDbgc->CmdHlp.pfnPrintf(&pDbgc->CmdHlp, NULL, "VBoxDbg> "); 872 890 pDbgc->fReady = true; … … 938 956 * Wait for a debug event. 939 957 */ 940 PCDBGFEVENT pEvent;941 rc = DBGFR3EventWait(pDbgc->pUVM, pDbgc->fLog ? 1 : 32, & pEvent);958 DBGFEVENT Event; 959 rc = DBGFR3EventWait(pDbgc->pUVM, pDbgc->fLog ? 1 : 32, &Event); 942 960 if (RT_SUCCESS(rc)) 943 961 { 944 rc = dbgcProcessEvent(pDbgc, pEvent);962 rc = dbgcProcessEvent(pDbgc, &Event); 945 963 if (RT_FAILURE(rc)) 946 964 break; -
trunk/src/VBox/Debugger/testcase/tstDBGCStubs.cpp
r82968 r86098 94 94 return VERR_INTERNAL_ERROR; 95 95 } 96 VMMR3DECL(int) DBGFR3EventWait(PUVM pUVM, RTMSINTERVAL cMillies, P CDBGFEVENT *ppEvent)96 VMMR3DECL(int) DBGFR3EventWait(PUVM pUVM, RTMSINTERVAL cMillies, PDBGFEVENT pEvent) 97 97 { 98 98 return VERR_INTERNAL_ERROR; … … 107 107 } 108 108 109 VMMR3DECL(int) DBGFR3Halt(PUVM pUVM )109 VMMR3DECL(int) DBGFR3Halt(PUVM pUVM, VMCPUID idCpu) 110 110 { 111 111 return VERR_INTERNAL_ERROR; … … 122 122 { 123 123 } 124 VMMR3DECL(bool) DBGFR3IsHalted(PUVM pUVM )124 VMMR3DECL(bool) DBGFR3IsHalted(PUVM pUVM, VMCPUID idCpu) 125 125 { 126 126 return true; … … 164 164 return VERR_DBG_LINE_NOT_FOUND; 165 165 } 166 VMMR3DECL(int) DBGFR3Resume(PUVM pUVM )166 VMMR3DECL(int) DBGFR3Resume(PUVM pUVM, VMCPUID idCpu) 167 167 { 168 168 return VERR_INTERNAL_ERROR;
Note:
See TracChangeset
for help on using the changeset viewer.