void SimpleDashelConnection::connectionCreated(Dashel::Stream *stream) { const std::string& targetName(stream->getTargetName()); if (targetName.substr(0, targetName.find_first_of(':')) == "tcp") { // schedule current stream for disconnection if (this->stream) { toDisconnect.push_back(this->stream); clearBreakpoints(); } // set new stream as current stream this->stream = stream; SEND_NOTIFICATION(LOG_INFO, "new client connected", stream->getTargetName()); } }
void SimpleDashelConnection::connectionClosed(Dashel::Stream *stream, bool abnormal) { // if the stream being closed is the current one (not old), clear breakpoints and reset current if (stream == this->stream) { clearBreakpoints(); this->stream = nullptr; } if (abnormal) { SEND_NOTIFICATION(LOG_WARNING, "client disconnected abnormally", stream->getTargetName()); } else { SEND_NOTIFICATION(LOG_INFO, "client disconnected properly", stream->getTargetName()); } }
int main(int argc, const char *argv[]) { // Check arguments and ensure application to load specified if(!cmdParser(argc, argv)) { icmMessage("E", "platform", "Command Line parser error"); return 1; } // the constructor createPlatform(); icmSimulationStarting(); // apply watchpoints in shared memory applyWatchpoints(handles.shared); // set register watchpoints for processor0 only applyRegWatchpoints(handles.processor0); // this is set to step for one instruction Bool stepOver = False; Bool finished = False; icmProcessorP stopProcessor = NULL; // query registers and register groups in processor0 queryRegisters(handles.processor0); while(!finished) { // simulate the platform using the default scheduler if(stepOver) { icmSetICountBreakpoint(stopProcessor, 1); stopProcessor = icmSimulatePlatform(); stepOver = False; } else { applyBreakpoints(handles.processor0); applyBreakpoints(handles.processor1); stopProcessor = icmSimulatePlatform(); clearBreakpoints(handles.processor0); clearBreakpoints(handles.processor1); } switch(icmGetStopReason(stopProcessor)) { case ICM_SR_EXIT: finished = True; break; case ICM_SR_FINISH: finished = True; break; case ICM_SR_BP_ICOUNT: icmPrintf( "Processor %s icount %u stopped at icount\n", icmGetProcessorName(stopProcessor, "/"), (Uns32)icmGetProcessorICount(stopProcessor) ); break; case ICM_SR_BP_ADDRESS: icmPrintf( "Processor %s icount %u stopped at address 0x%08x\n", icmGetProcessorName(stopProcessor, "/"), (Uns32)icmGetProcessorICount(stopProcessor), (Uns32)icmGetPC(stopProcessor) ); stepOver = True; break; case ICM_SR_WATCHPOINT: icmPrintf( "Processor %s icount %u stopped at watchpoint\n", icmGetProcessorName(stopProcessor, "/"), (Uns32)icmGetProcessorICount(stopProcessor) ); handleWatchpoints(); break; default: icmPrintf( "Processor %s icount %u stopped for reason %u\n", icmGetProcessorName(stopProcessor, "/"), (Uns32)icmGetProcessorICount(stopProcessor), icmGetStopReason(stopProcessor) ); break; } } icmTerminate(); return 0; }
void DebuggerManager::initActions() { KAction * newaction; KActionCollection *ac = quantaApp->actionCollection(); if(!ac) return; //Debugger, breakpoint newaction = new KAction(i18n("Toggle &Breakpoint"), SmallIcon("debug_breakpoint"), Qt::CTRL+Qt::SHIFT+Qt::Key_B, this, SLOT(toggleBreakpoint()), ac, "debug_breakpoints_toggle"); newaction->setToolTip(i18n("Toggles a breakpoint at the current cursor location")); newaction = new KAction(i18n("&Clear Breakpoints"), 0, this, SLOT(clearBreakpoints()), ac, "debug_breakpoints_clear"); newaction->setToolTip(i18n("Clears all breakpoints")); newaction = new KAction(i18n("Break When..."), SmallIcon("math_int"), 0, this, SLOT(slotConditionalBreakpoint()), ac, "debug_conditional_break"); newaction->setToolTip(i18n("Adds a new conditional breakpoint")); newaction = new KAction(i18n("Break When..."), SmallIcon("math_int"), 0, this, SLOT(slotConditionalBreakpoint()), ac, "debug_conditional_breakdialog"); newaction->setToolTip(i18n("Adds a new conditional breakpoint")); // Execution newaction = new KAction(i18n("Send HTTP R&equest"), SmallIcon("debug_currentline"), 0, this, SLOT(slotDebugRequest()), ac, "debug_request"); newaction->setToolTip(i18n("Initiate HTTP Request to the server with debugging activated")); newaction = new KAction(i18n("&Trace"), SmallIcon("debug_run"), 0, this, SLOT(slotDebugTrace()), ac, "debug_trace"); newaction->setToolTip(i18n("Traces through the script. If a script is currently not being debugged, it will start in trace mode when started")); newaction = new KAction(i18n("&Run"), SmallIcon("debug_leap"), 0, this, SLOT(slotDebugRun()), ac, "debug_run"); newaction->setToolTip(i18n("Runs the script. If a script is currently not being debugged, it will start in run mode when started")); newaction = new KAction(i18n("&Step"), SmallIcon("debug_stepover"), 0, this, SLOT(slotDebugStepOver()), ac, "debug_stepover"); newaction->setToolTip(i18n("Executes the next line of execution, but does not step into functions or includes")); newaction = new KAction(i18n("Step &Into"), SmallIcon("debug_stepinto"), 0, this, SLOT(slotDebugStepInto()), ac, "debug_stepinto"); newaction->setToolTip(i18n("Executes the next line of execution and steps into it if it is a function call or inclusion of a file")); newaction = new KAction(i18n("S&kip"), SmallIcon("debug_skip"), 0, this, SLOT(slotDebugSkip()), ac, "debug_skip"); newaction->setToolTip(i18n("Skips the next command of execution and makes the next command the current one")); newaction = new KAction(i18n("Step &Out"), SmallIcon("debug_stepout"), 0, this, SLOT(slotDebugStepOut()), ac, "debug_stepout"); newaction->setToolTip(i18n("Executes the rest of the commands in the current function/file and pauses when it is done (when it reaches a higher level in the backtrace)")); newaction = new KAction(i18n("&Pause"), SmallIcon("debug_pause"), 0, this, SLOT(slotDebugPause()), ac, "debug_pause"); newaction->setToolTip(i18n("Pauses the scripts if it is running or tracing. If a script is currently not being debugged, it will start in paused mode when started")); newaction = new KAction(i18n("Kill"), SmallIcon("debug_kill"), 0, this, SLOT(slotDebugKill()), ac, "debug_kill"); newaction->setToolTip(i18n("Kills the currently running script")); newaction = new KAction(i18n("Start Session"), SmallIcon("debug_connect"), 0, this, SLOT(slotDebugStartSession()), ac, "debug_connect"); newaction->setToolTip(i18n("Starts the debugger internally (Makes debugging possible)")); newaction = new KAction(i18n("End Session"), SmallIcon("debug_disconnect"), 0, this, SLOT(slotDebugEndSession()), ac, "debug_disconnect"); newaction->setToolTip(i18n("Stops the debugger internally (debugging not longer possible)")); // Variables newaction = new KAction(i18n("Watch Variable"), SmallIcon("math_brace"), 0, this, SLOT(slotAddWatch()), ac, "debug_addwatch"); newaction->setToolTip(i18n("Adds a variable to the watch list")); newaction = new KAction(i18n("Watch Variable"), SmallIcon("math_brace"), 0, this, SLOT(slotAddWatch()), ac, "debug_addwatchdialog"); newaction->setToolTip(i18n("Adds a variable to the watch list")); newaction = new KAction(i18n("Set Value of Variable"), SmallIcon("edit"), 0, this, SLOT(slotVariableSet()), ac, "debug_variable_set"); newaction->setToolTip(i18n("Changes the value of a variable")); newaction = new KAction(i18n("Set Value of Variable"), SmallIcon("edit"), 0, this, SLOT(slotVariableSet()), ac, "debug_variable_setdialog"); newaction->setToolTip(i18n("Changes the value of a variable")); newaction = new KAction(i18n("Open Profiler Output"), SmallIcon("launch"), 0, this, SLOT(slotProfilerOpen()), ac, "debug_profiler_open"); newaction->setToolTip(i18n("Opens the profiler output file")); enableAction("*", false); }