static void sendExceptionState(LLDBPlugin* plugin, PDWriter* writer) { printf("sending exception state\n"); //setCallstack(plugin, writer); setExceptionLocation(plugin, writer); //setLocals(plugin, writer); }
static void processEvents(LLDBPlugin* plugin, PDReader* reader, PDWriter* writer) { uint32_t event; while ((event = PDRead_get_event(reader))) { //printf("LLDBPlugin: %d Got event %s\n", event, eventTypes[event]); switch (event) { case PDEventType_GetExceptionLocation : setExceptionLocation(plugin, writer); break; case PDEventType_GetCallstack : setCallstack(plugin, writer); break; case PDEventType_SetExecutable : setExecutable(plugin, reader); break; case PDEventType_SelectThread : selectThread(plugin, reader, writer); break; case PDEventType_SelectFrame : selectFrame(plugin, reader, writer); break; case PDEventType_GetLocals : setLocals(plugin, writer); break; case PDEventType_GetThreads : setThreads(plugin, writer); break; case PDEventType_GetSourceFiles : setSourceFiles(plugin, writer); break; case PDEventType_SetBreakpoint : setBreakpoint(plugin, reader, writer); break; case PDEventType_Action : eventAction(plugin, reader); break; } } setTty(plugin, writer); }
static void selectFrame(LLDBPlugin* plugin, PDReader* reader, PDWriter* writer) { uint32_t frameIndex; printf("selectFrame...\n"); PDRead_find_u32(reader, &frameIndex, "frame", 0); plugin->frameSelection[plugin->selectedThreadId] = frameIndex; setExceptionLocation(plugin, writer); }
static void processEvents(DbgEngPlugin* plugin, PDReader* reader, PDWriter* writer) { printf("DbgEngPlugin: processEvents\n"); PDEventType event; while ((event = (PDEventType)PDRead_get_event(reader))) { printf("DbgEngPlugin: %d Got event %s\n", (int)event, eventTypes[event]); switch (event) { case PDEventType_getExceptionLocation: setExceptionLocation(plugin, writer); break; case PDEventType_getCallstack: setCallstack(plugin, writer); break; case PDEventType_setExecutable: setExecutable(plugin, reader); break; case PDEventType_getLocals: setLocals(plugin, writer); break; case PDEventType_setBreakpoint: setBreakpoint(plugin, reader, writer); break; case PDEventType_action: eventAction(plugin, reader); break; } } }
static void sendState(PDWriter* writer) { setExceptionLocation(writer); setRegisters(writer); setDisassembly(writer, 0, 10); }
static int update(void* user_data, PDUI* uiFuncs, PDReader* inEvents, PDWriter* writer) { uint32_t event; (void)uiFuncs; SourceCodeData* data = (SourceCodeData*)user_data; PDUISCInterface* sourceFuncs = uiFuncs->sc_input_text("test", 800, 700, 0, 0); while ((event = PDRead_get_event(inEvents)) != 0) { switch (event) { case PDEventType_SetExceptionLocation: { setExceptionLocation(uiFuncs, sourceFuncs, data, inEvents); data->requestFiles = true; break; } case PDEventType_SetSourceCodeFile: { const char* filename; if (PDRead_find_string(inEvents, &filename, "filename", 0) == PDReadStatus_NotFound) break; setSourceCodeFile(uiFuncs, sourceFuncs, data, filename, 0); break; } case PDEventType_ToggleBreakpointCurrentLine: { toggleBreakpointCurrentLine(sourceFuncs, data, writer); break; } case PDEventType_SetSourceFiles: { // TODO: Store the files data->hasFiles = true; break; } } } updateKeyboard(data, sourceFuncs, uiFuncs); PDUI_sc_update(sourceFuncs); PDUI_sc_draw(sourceFuncs); //showInUI(data, uiFuncs); PDWrite_event_begin(writer, PDEventType_GetExceptionLocation); PDWrite_event_end(writer); if (!data->hasFiles && data->requestFiles) { PDWrite_event_begin(writer, PDEventType_GetSourceFiles); PDWrite_event_end(writer); } return 0; }