int cmd_cvar(int argc, char *argv[], void *pv){ T *pt = (T*)pv; if(argc < 2) CmdPrint(cpplib::dstring(argv[0]) << " = " << *pt); else if(toupper(argv[1][0]) == 'T') *pt = !*pt; else *pt = !!atoi(argv[1]); return 0; }
main( INT_T argc, char * argv[] ) { INT_T i; mapD.size.x = 4*12; mapD.size.y = 3*12; printD.scale = 1.0; for (i=0; i<(sizeof cmds)/(sizeof cmds[0]); i++) { switch (cmds[i].cmd) { case C_START: CmdPrint( cmds[i].cmd ); DumpMap( "Start\n", 0, 0 ); break; case C_DOWN: CmdPrint( cmds[i].cmd, cmds[i].pos ); DumpMap( "Down (%0.3f %0.3f)\n", cmds[i].pos.x, cmds[i].pos.y ); break; case C_MOVE: CmdPrint( cmds[i].cmd, cmds[i].pos ); DumpMap( "Move (%0.3f %0.3f)\n", cmds[i].pos.x, cmds[i].pos.y ); break; case C_UP: CmdPrint( cmds[i].cmd, cmds[i].pos ); DumpMap( "Up\n", 0, 0 ); break; case C_PRINT: DoPrintPrint( NULL ); DumpMap( "Print\n", 0, 0 ); break; case C_CANCEL: ClearPrint(); DumpMap( "Cancel\n", 0, 0 ); break; case C_SCALE: printD.scale = cmds[i].x; break; } } }
void CmdInterrupt::setClientOutput(DebuggerClient *client) { client->setOutputType(DebuggerClient::OTCodeLoc); client->setOTFileLine(m_bpi->m_file, m_bpi->m_line1); Array values; DebuggerClient::WatchPtrVec &watches = client->getWatches(); for (int i = 0; i < (int)watches.size(); i++) { Array watch; watch.set("format", watches[i]->first); watch.set("php", watches[i]->second); Variant v = CmdPrint().processWatch(client, watches[i]->first, watches[i]->second); watch.set("value", CmdPrint::FormatResult(watches[i]->first, v)); values.append(watch); } client->setOTValues(values); }
static void ExecProgram (CmdDesc* Cmd) /* Execute a subprocess with the given name/parameters. Exit on errors. */ { int Status; /* If in debug mode, output the command line we will execute */ if (Debug) { printf ("Executing: "); CmdPrint (Cmd, stdout); printf ("\n"); } /* Call the program */ Status = spawnvp (P_WAIT, Cmd->Name, SPAWN_ARGV_CONST_CAST Cmd->Args); /* Check the result code */ if (Status < 0) { /* Error executing the program */ Error ("Cannot execute `%s': %s", Cmd->Name, strerror (errno)); } else if (Status != 0) { /* Called program had an error */ exit (Status); } }
void CmdInterrupt::onClient(DebuggerClient &client) { client.setCurrentLocation(m_threadId, m_bpi); if (!client.getDebuggerClientSmallStep()) { // Adjust line and char if it's not small stepping if (m_bpi->m_line1 == m_bpi->m_line2) { m_bpi->m_char1 = 1; m_bpi->m_char2 = 100; } } client.setMatchedBreakPoints(m_matched); switch (m_interrupt) { case SessionStarted: if (!m_program.empty()) { client.info("Program %s loaded. Type '[r]un' or '[c]ontinue' to go.", m_program.c_str()); m_bpi->m_file = m_program; } break; case SessionEnded: if (!m_program.empty()) { client.info("Program %s exited normally.", m_program.c_str()); } break; case RequestStarted: if (!m_program.empty()) { client.info("Web request %s started.", m_program.c_str()); } break; case RequestEnded: if (!m_program.empty()) { client.info("Web request %s ended.", m_program.c_str()); } break; case PSPEnded: if (!m_program.empty()) { client.info("Post-Send Processing for %s was ended.", m_program.c_str()); } break; case HardBreakPoint: case BreakPointReached: case ExceptionThrown: { bool found = false; bool toggled = false; auto *bps = client.getBreakPoints(); for (unsigned int i = 0; i < m_matched.size(); i++) { BreakPointInfoPtr bpm = m_matched[i]; BreakPointInfoPtr bp; int index = 0; for (; index < (int)bps->size(); index++) { if (bpm->same((*bps)[index])) { bp = (*bps)[index]; break; } } if (bp) { found = true; if (bp->m_state == BreakPointInfo::Once) { bp->m_state = BreakPointInfo::Disabled; toggled = true; } if (m_interrupt == BreakPointReached || m_interrupt == HardBreakPoint) { client.info("Breakpoint %d reached %s", bp->index(), m_bpi->site().c_str()); client.shortCode(m_bpi); } else { if (m_bpi->m_exceptionClass == BreakPointInfo::ErrorClassName) { client.info("Breakpoint %d reached: An error occurred %s", bp->index(), m_bpi->site().c_str()); client.shortCode(m_bpi); client.error("Error Message: %s", m_bpi->m_exceptionObject.c_str()); } else { client.info("Breakpoint %d reached: Throwing %s %s", bp->index(), m_bpi->m_exceptionClass.c_str(), m_bpi->site().c_str()); client.shortCode(m_bpi); if (client.getLogFileHandler()) { client.output(m_bpi->m_exceptionObject); } } } if (!bpm->m_output.empty()) { client.print(bpm->m_output); } } } if (toggled) { CmdBreak::SendClientBreakpointListToServer(client); } if (!found) { if (m_interrupt == HardBreakPoint) { // for HardBreakPoint, default the frame to the caller client.setFrame(1); } client.info("Break %s", m_bpi->site().c_str()); client.shortCode(m_bpi); } break; } } if (!m_errorMsg.empty()) { client.error(m_errorMsg); } // watches switch (m_interrupt) { case SessionStarted: case RequestStarted: break; default: { DebuggerClient::WatchPtrVec &watches = client.getWatches(); for (int i = 0; i < (int)watches.size(); i++) { if (i > 0) client.output("%s", ""); client.info("Watch %d: %s =", i + 1, watches[i]->second.c_str()); Variant v = CmdPrint().processWatch(client, watches[i]->first, watches[i]->second); client.output(CmdPrint::FormatResult(watches[i]->first, v)); } } } }
bool CmdInterrupt::onClient(DebuggerClient *client) { client->setCurrentLocation(m_threadId, m_bpi); client->setMatchedBreakPoints(m_matched); switch (m_interrupt) { case SessionEnded: case RequestEnded: case PSPEnded: if (m_pendingJump) { client->error("Your jump point cannot be reached. You may only jump " "to certain parallel or outer execution points."); } break; } switch (m_interrupt) { case SessionStarted: if (!m_program.empty()) { client->info("Program %s loaded. Type '[r]un' or '[c]ontinue' to go.", m_program.c_str()); m_bpi->m_file = m_program; } break; case SessionEnded: if (!m_program.empty()) { client->info("Program %s exited normally.", m_program.c_str()); } break; case RequestStarted: if (!m_program.empty()) { client->info("Web request %s started.", m_program.c_str()); } break; case RequestEnded: if (!m_program.empty()) { client->info("Web request %s ended.", m_program.c_str()); } break; case PSPEnded: if (!m_program.empty()) { client->info("Post-Send Processing for %s was ended.", m_program.c_str()); } break; case BreakPointReached: case ExceptionThrown: { bool found = false; bool toggled = false; BreakPointInfoPtrVec *bps = client->getBreakPoints(); for (unsigned int i = 0; i < m_matched.size(); i++) { BreakPointInfoPtr bpm = m_matched[i]; BreakPointInfoPtr bp; int index = 0; for (; index < (int)bps->size(); index++) { if (bpm->same((*bps)[index])) { bp = (*bps)[index]; break; } } if (bp) { found = true; if (bp->m_state == BreakPointInfo::Once) { bp->m_state = BreakPointInfo::Disabled; toggled = true; } if (m_interrupt == BreakPointReached) { client->info("Breakpoint %d reached %s", index + 1, m_bpi->site().c_str()); } else { client->info("Breakpoint %d reached: Throwing %s %s", index + 1, m_bpi->m_exceptionClass.c_str(), m_bpi->site().c_str()); client->output(m_bpi->m_exceptionObject); } if (!bpm->m_output.empty()) { client->print(bpm->m_output); } } } if (toggled) { CmdBreak().update(client); } if (!found) { client->info("Break %s", m_bpi->site().c_str()); } break; } } if (!m_errorMsg.empty()) { client->error(m_errorMsg); } // watches switch (m_interrupt) { case SessionStarted: case RequestStarted: break; default: { DebuggerClient::WatchPtrVec &watches = client->getWatches(); for (int i = 0; i < (int)watches.size(); i++) { if (i > 0) client->output(""); client->info("Watch %d: %s =", i + 1, watches[i]->second.c_str()); CmdPrint().processWatch(client, watches[i]->first, watches[i]->second); } } } return true; }