diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java index 05aaeebf6f0..1bfbcda2b9d 100755 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizer.java @@ -86,6 +86,8 @@ import org.eclipse.cdt.visualizer.ui.util.GUIUtils; import org.eclipse.cdt.visualizer.ui.util.SelectionUtils; import org.eclipse.cdt.visualizer.ui.util.Timer; import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.internal.ui.commands.actions.DropToFrameCommandAction; import org.eclipse.debug.internal.ui.commands.actions.ResumeCommandAction; @@ -120,7 +122,9 @@ import org.eclipse.swt.widgets.Composite; public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPinnable { // --- constants --- - /** Eclipse ID for this view */ + private static final String THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER = "The thread id does not convert to an integer: "; //$NON-NLS-1$ + + /** Eclipse ID for this view */ public static final String ECLIPSE_ID = "org.eclipse.cdt.dsf.gdb.multicorevisualizer.visualizer"; //$NON-NLS-1$ // --- members --- @@ -999,7 +1003,16 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin IMIExecutionDMContext execContext = DMContexts.getAncestorOfType(context, IMIExecutionDMContext.class); - int tid = (execContext == null) ? 0 : execContext.getThreadId(); + + int tid = 0; + if (execContext != null) { + try { + tid = Integer.parseInt(execContext.getThreadId()); + } catch (NumberFormatException e) { + // continue tid=0 + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + execContext.getThreadId(); + } + } if (tid == 0) { // process List threads = model.getThreadsForProcess(pid); @@ -1406,7 +1419,17 @@ public class MulticoreVisualizer extends GraphicCanvasVisualizer implements IPin IMIProcessDMContext processContext = DMContexts.getAncestorOfType(execContext, IMIProcessDMContext.class); int pid = Integer.parseInt(processContext.getProcId()); - int tid = execContext.getThreadId(); + int tid; + try { + tid = Integer.parseInt(execContext.getThreadId()); + } catch (NumberFormatException e) { + rm.setStatus(new Status(IStatus.ERROR, MulticoreVisualizerUIPlugin.PLUGIN_ID, IStatus.ERROR, + "Unxepected thread id format:" + execContext.getThreadId(), e)); //$NON-NLS-1$ + rm.done(); + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + execContext.getThreadId(); + return; + } + String osTIDValue = threadData.getId(); // If we can't get the real Linux OS tid, fallback to using the gdb thread id diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java index 9ab24c3044f..901c2d52b88 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java @@ -61,7 +61,8 @@ import org.eclipse.cdt.dsf.service.DsfServicesTracker; */ public class MulticoreVisualizerEventListener { - // --- members --- + private static final String THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER = "The thread id does not convert to an integer: "; //$NON-NLS-1$ + // --- members --- /** Visualizer we're managing events for. */ protected MulticoreVisualizer fVisualizer; @@ -130,11 +131,19 @@ public class MulticoreVisualizerEventListener { int coreId = Integer.parseInt(cores[0]); final VisualizerCore vCore = model.getCore(coreId); - int tid = execDmc.getThreadId(); - - final VisualizerThread thread = model.getThread(tid); + int tid; + VisualizerThread threadTmp = null; + try { + tid = Integer.parseInt(execDmc.getThreadId()); + threadTmp = model.getThread(tid); + } catch (NumberFormatException e) { + // unable to resolve thread + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + execDmc.getThreadId(); + return; + } - if (thread != null) { + if (threadTmp != null) { + final VisualizerThread thread = threadTmp; assert thread.getState() == VisualizerExecutionState.RUNNING; VisualizerExecutionState _newState = VisualizerExecutionState.SUSPENDED; @@ -224,11 +233,19 @@ public class MulticoreVisualizerEventListener { // We don't deal with processes } else if (context instanceof IMIExecutionDMContext) { // Thread resumed - int tid = ((IMIExecutionDMContext)context).getThreadId(); + int tid; + VisualizerThread thread = null; + String strThreadId = ((IMIExecutionDMContext) context).getThreadId(); + try { + tid = Integer.parseInt(strThreadId); + thread = model.getThread(tid); + } catch (NumberFormatException e) { + // unable to resolve thread + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + strThreadId; + return; + } - VisualizerThread thread = model.getThread(tid); - - if (thread != null) { + if (thread != null) { assert thread.getState() == VisualizerExecutionState.SUSPENDED || thread.getState() == VisualizerExecutionState.CRASHED; @@ -267,7 +284,15 @@ public class MulticoreVisualizerEventListener { if (vCore == null) return; int pid = Integer.parseInt(processContext.getProcId()); - int tid = execDmc.getThreadId(); + + int tid; + try { + tid = Integer.parseInt(execDmc.getThreadId()); + } catch (NumberFormatException e) { + // unable to resolve thread + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + execDmc.getThreadId(); + return; + } int osTid = 0; @@ -321,7 +346,14 @@ public class MulticoreVisualizerEventListener { return; int pid = Integer.parseInt(processContext.getProcId()); - int tid = execDmc.getThreadId(); + int tid; + try { + tid = Integer.parseInt(execDmc.getThreadId()); + } catch (NumberFormatException e) { + // Unable to resolve thread information + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + execDmc.getThreadId(); + return; + } int osTid = 0; try { @@ -382,7 +414,16 @@ public class MulticoreVisualizerEventListener { IDMContext[] contexts = getData(); for (IDMContext c : contexts) { if (c instanceof IMIExecutionDMContext) { - int tid = ((IMIExecutionDMContext)c).getThreadId(); + int tid; + String strThreadId = ((IMIExecutionDMContext) c).getThreadId(); + try { + tid = Integer.parseInt(strThreadId); + } catch (NumberFormatException e) { + // unable to resolve the thread id + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + strThreadId; + continue; + } + model.markThreadExited(tid); } } @@ -401,10 +442,15 @@ public class MulticoreVisualizerEventListener { } else if (context instanceof IMIExecutionDMContext) { // Thread exited - int tid = ((IMIExecutionDMContext)context).getThreadId(); + int tid; + String strThreadId = ((IMIExecutionDMContext) context).getThreadId(); + try { + tid = Integer.parseInt(strThreadId); + model.markThreadExited(tid); + } catch (NumberFormatException e) { + assert false : THE_THREAD_ID_DOES_NOT_CONVERT_TO_AN_INTEGER + strThreadId; + } - model.markThreadExited(tid); - if (canvas != null) { canvas.requestUpdate(); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerSelectionFinder.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerSelectionFinder.java index 18548113cf6..3ccdeccb108 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerSelectionFinder.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerSelectionFinder.java @@ -140,8 +140,16 @@ public class MulticoreVisualizerSelectionFinder { IMIExecutionDMContext execContext = DMContexts.getAncestorOfType(context, IMIExecutionDMContext.class); - int tid = (execContext == null) ? 0 : - execContext.getThreadId(); + int tid = 0; + if (execContext != null) { + try { + tid = Integer.parseInt(execContext.getThreadId()); + } catch (NumberFormatException e) { + // Unable to resolve thread id + assert false : "The thread id does not convert to an integer: " + execContext.getThreadId(); //$NON-NLS-1$ + } + } + return tid; } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.tests/src/org/eclipse/cdt/dsf/mi/service/command/commands/TestMIBreakInsertCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.tests/src/org/eclipse/cdt/dsf/mi/service/command/commands/TestMIBreakInsertCommand.java index bdc56f53f82..c90c1ab309c 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.tests/src/org/eclipse/cdt/dsf/mi/service/command/commands/TestMIBreakInsertCommand.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.tests/src/org/eclipse/cdt/dsf/mi/service/command/commands/TestMIBreakInsertCommand.java @@ -33,7 +33,7 @@ public class TestMIBreakInsertCommand { @Test public void pathWithSlashesShouldNotBeSubstituted() { MIBreakInsert target = new MIBreakInsert(new TestContext(), false, - false, null, 1, "/test/this/path:14", 4, false); + false, null, 1, "/test/this/path:14", "4", false); assertEquals("Wrong syntax for command", "-break-insert -i 1 -p 4 /test/this/path:14\n", target diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java index f64241a747a..b21a0a375cd 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbPinProvider.java @@ -183,9 +183,9 @@ public class GdbPinProvider implements IPinProvider { // get the execution (thread) context label if (execDmc != null) { - int threadId = execDmc.getThreadId(); + String threadId = execDmc.getThreadId(); label += !label.isEmpty() ? ": " : ""; //$NON-NLS-1$//$NON-NLS-2$ - label += "Thread [" + Integer.toString(threadId) + "]"; //$NON-NLS-1$//$NON-NLS-2$ + label += "Thread [" + threadId + "]"; //$NON-NLS-1$//$NON-NLS-2$ } return label; } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/breakpoints/GdbBreakpointVMProvider.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/breakpoints/GdbBreakpointVMProvider.java index 68d8c7b660a..c497ea062fd 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/breakpoints/GdbBreakpointVMProvider.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/breakpoints/GdbBreakpointVMProvider.java @@ -359,27 +359,17 @@ public class GdbBreakpointVMProvider extends BreakpointVMProvider { IMIExecutionDMContext threadContext = DMContexts.getAncestorOfType( execContext, IMIExecutionDMContext.class ); if ( threadContext != null ) { // A thread is selected. Now make sure this breakpoint is assigned to this thread. - if ( data.getThreadId() != null && data.getThreadId().length() > 0 ) { - try { - int bpThreadId = Integer.parseInt( data.getThreadId() ); - // A threadId of 0 means all threads of this process. We therefore will have to check - // if this breakpoint applies to the process that is selected. But if the threadId is not 0 - // we simply make sure we have the right thread selected. - if ( bpThreadId != 0 ) { - rm.done( threadContext.getThreadId() == bpThreadId ); - return; - } - } - catch( NumberFormatException e ) { - assert false; - GdbUIPlugin.getDefault().getLog().log( new Status( - IStatus.ERROR, - GdbUIPlugin.getUniqueIdentifier(), - "Invalid breakpoint thread id" ) ); //$NON-NLS-1$ - rm.done( true ); - return; - } - } + if (data.getThreadId() != null && data.getThreadId().length() > 0) { + String bpThreadId = data.getThreadId().trim(); + // A threadId of 0 means all threads of this process. We therefore will have to check + // if this breakpoint applies to the process that is selected. But if the threadId is not 0 + // we simply make sure we have the right thread selected. + if (!bpThreadId.equals("0")) { //$NON-NLS-1$ + String ctxThreadId = threadContext.getThreadId(); + rm.done(ctxThreadId.equals(bpThreadId)); + return; + } + } } // If we get here it is that the breakpoint is not assigned to a single thread. diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java index e9207cb55db..6b54c614bb9 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/viewmodel/launch/ThreadVMNode.java @@ -297,7 +297,7 @@ public class ThreadVMNode extends AbstractThreadVMNode IMIExecutionDMContext execDmc = findDmcInPath( update.getViewerInput(), update.getElementPath(), IMIExecutionDMContext.class); if (execDmc != null) { - update.setProperty(ILaunchVMConstants.PROP_ID, Integer.toString(execDmc.getThreadId())); + update.setProperty(ILaunchVMConstants.PROP_ID, execDmc.getThreadId()); // set pin properties IPinElementColorDescriptor colorDesc = PinCloneUtils.getPinElementColorDescriptor(GdbPinProvider.getPinnedHandles(), execDmc); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java index 6a5056d7650..33532245339 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java @@ -128,15 +128,14 @@ public class GDBBreakpoints_7_0 extends MIBreakpoints final Boolean isHardware = (Boolean) getProperty(attributes, MIBreakpointDMData.IS_HARDWARE, false); final String condition = (String) getProperty(attributes, MIBreakpoints.CONDITION, NULL_STRING); final Integer ignoreCount = (Integer) getProperty(attributes, MIBreakpoints.IGNORE_COUNT, 0); - String threadId = (String) getProperty(attributes, MIBreakpointDMData.THREAD_ID, "0"); //$NON-NLS-1$ - final int tid = Integer.parseInt(threadId); + String threadId = (String) getProperty(attributes, MIBreakpointDMData.THREAD_ID, "0"); //$NON-NLS-1$ final Step insertBreakpointStep = new Step() { @Override public void execute(final RequestMonitor rm) { // Execute the command fConnection.queueCommand( - fCommandFactory.createMIBreakInsert(context, isTemporary, isHardware, condition, ignoreCount, location, tid, !enabled, false), + fCommandFactory.createMIBreakInsert(context, isTemporary, isHardware, condition, ignoreCount, location, threadId, !enabled, false), new DataRequestMonitor(getExecutor(), rm) { @Override protected void handleSuccess() { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java index 84dff5163a1..26fd546412d 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java @@ -210,7 +210,7 @@ public class GDBBreakpoints_7_2 extends GDBBreakpoints_7_0 final String condition = (String) getProperty(attributes, MIBreakpoints.CONDITION, NULL_STRING); fConnection.queueCommand( - fConnection.getCommandFactory().createMIBreakInsert(context, false, isFastTracepoint, condition, 0, location, 0, !enabled, true), + fConnection.getCommandFactory().createMIBreakInsert(context, false, isFastTracepoint, condition, 0, location, "0", !enabled, true), //$NON-NLS-1$ new DataRequestMonitor(getExecutor(), drm) { @Override protected void handleSuccess() { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java index 023785a4f6f..a14c633e444 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java @@ -643,7 +643,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses { // Insert a breakpoint at the requested stop symbol. IBreakpointsTargetDMContext bpTarget = DMContexts.getAncestorOfType(containerDmc, IBreakpointsTargetDMContext.class); fGdb.queueCommand( - fCommandFactory.createMIBreakInsert(bpTarget, true, false, null, 0, stopSymbol, 0), + fCommandFactory.createMIBreakInsert(bpTarget, true, false, null, 0, stopSymbol, "0"), //$NON-NLS-1$ new DataRequestMonitor(getExecutor(), requestMonitor) { @Override protected void handleSuccess() { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java index 1624d073ad9..acb7838df0e 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java @@ -169,14 +169,9 @@ public class GDBProcesses_7_0 extends AbstractDsfService * @return */ @Override - public int getThreadId(){ - try { - return Integer.parseInt(fThreadId); - } catch (NumberFormatException e) { - } - - return 0; - } + public String getThreadId() { + return fThreadId; + } /* Unused; reintroduce if needed public String getId(){ diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java index 3baa51c01f9..9bf1c8e2ee8 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java @@ -147,16 +147,16 @@ public class GDBRunControl extends MIRunControl { } @Override - public IMIExecutionDMContext createMIExecutionContext(IContainerDMContext container, int threadId) { + public IMIExecutionDMContext createMIExecutionContext(IContainerDMContext container, String threadId) { IProcessDMContext procDmc = DMContexts.getAncestorOfType(container, IProcessDMContext.class); IThreadDMContext threadDmc = null; if (procDmc != null) { // For now, reuse the threadId as the OSThreadId - threadDmc = fProcService.createThreadContext(procDmc, Integer.toString(threadId)); + threadDmc = fProcService.createThreadContext(procDmc, threadId); } - return fProcService.createExecutionContext(container, threadDmc, Integer.toString(threadId)); + return fProcService.createExecutionContext(container, threadDmc, threadId); } @Override @@ -236,7 +236,7 @@ public class GDBRunControl extends MIRunControl { IExecutionDMContext ctxt = iterator.next(); if(! list.contains(ctxt)){ IContainerDMContext containerDmc = DMContexts.getAncestorOfType(ctxt, IContainerDMContext.class); - MIEvent e = new MIThreadExitEvent(containerDmc, Integer.toString(((IMIExecutionDMContext)ctxt).getThreadId())); + MIEvent e = new MIThreadExitEvent(containerDmc, ((IMIExecutionDMContext)ctxt).getThreadId()); // Dispatch DsfMIThreadExitEvent getSession().dispatchEvent(e, getProperties()); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java index e84adae48dd..db20ecb2a10 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java @@ -2189,7 +2189,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo attr.put(MIBreakpoints.FILE_NAME, debuggerPath); attr.put(MIBreakpoints.LINE_NUMBER, lineNumber); attr.put(MIBreakpointDMData.IS_TEMPORARY, true); - attr.put(MIBreakpointDMData.THREAD_ID, Integer.toString(threadExecDmc.getThreadId())); + attr.put(MIBreakpointDMData.THREAD_ID, threadExecDmc.getThreadId()); // Now do the operation moveToLocation(context, location, attr, rm); @@ -2235,7 +2235,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo attr.put(MIBreakpoints.BREAKPOINT_TYPE, MIBreakpoints.BREAKPOINT); attr.put(MIBreakpoints.ADDRESS, "0x" + address.toString(16)); //$NON-NLS-1$ attr.put(MIBreakpointDMData.IS_TEMPORARY, true); - attr.put(MIBreakpointDMData.THREAD_ID, Integer.toString(threadExecDmc.getThreadId())); + attr.put(MIBreakpointDMData.THREAD_ID, threadExecDmc.getThreadId()); // Now do the operation moveToLocation(context, location, attr, rm); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java index 227419f80ea..89c04add883 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java @@ -210,7 +210,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence { IBreakpointsTargetDMContext.class); fCommandControl.queueCommand( - fCommandFactory.createMIBreakInsert(bpTargetDmc, true, false, null, 0, userStopSymbol, 0), + fCommandFactory.createMIBreakInsert(bpTargetDmc, true, false, null, 0, userStopSymbol, "0"), //$NON-NLS-1$ new ImmediateDataRequestMonitor(rm) { @Override public void handleSuccess() { @@ -241,7 +241,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence { fCommandControl.queueCommand( fCommandFactory.createMIBreakInsert(bpTargetDmc, true, false, null, 0, - ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT, 0), + ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT, "0"), //$NON-NLS-1$ new ImmediateDataRequestMonitor(rm) { @Override public void handleSuccess() { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/CommandFactory_6_8.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/CommandFactory_6_8.java index e3e04368975..63887022390 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/CommandFactory_6_8.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/CommandFactory_6_8.java @@ -28,13 +28,13 @@ public class CommandFactory_6_8 extends CommandFactory { @Override public ICommand createMIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, - boolean isHardware, String condition, int ignoreCount, String line, int tid) { + boolean isHardware, String condition, int ignoreCount, String line, String tid) { return new MIBreakInsert(ctx, isTemporary, isHardware, condition, ignoreCount, line, tid, true); } @Override public ICommand createMIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, - boolean isHardware, String condition, int ignoreCount, String location, int tid, boolean disabled, boolean isTracepoint) { + boolean isHardware, String condition, int ignoreCount, String location, String tid, boolean disabled, boolean isTracepoint) { return new MIBreakInsert(ctx, isTemporary, isHardware, condition, ignoreCount, location, tid, disabled, isTracepoint, true); } } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/IMIExecutionDMContext.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/IMIExecutionDMContext.java index cffaecd2410..7d9a8a00897 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/IMIExecutionDMContext.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/IMIExecutionDMContext.java @@ -22,6 +22,7 @@ public interface IMIExecutionDMContext extends IExecutionDMContext /** * Returns the GDB/MI thread identifier of this context. * @return + * @since 5.0 */ - public int getThreadId(); + public String getThreadId(); } \ No newline at end of file diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java index 2a05bf0b094..c58993e22a6 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java @@ -661,13 +661,12 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints, I final String condition = (String) getProperty(attributes, CONDITION, NULL_STRING); final Integer ignoreCount = (Integer) getProperty(attributes, IGNORE_COUNT, 0 ); final String threadId = (String) getProperty(attributes, MIBreakpointDMData.THREAD_ID, "0"); //$NON-NLS-1$ - final int tid = Integer.parseInt(threadId); final Step insertBreakpointStep = new Step() { @Override public void execute(final RequestMonitor rm) { fConnection.queueCommand( - fCommandFactory.createMIBreakInsert(context, isTemporary, isHardware, condition, ignoreCount, location, tid), + fCommandFactory.createMIBreakInsert(context, isTemporary, isHardware, condition, ignoreCount, location, threadId), new DataRequestMonitor(getExecutor(), rm) { @Override protected void handleSuccess() { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java index c34d3444eac..6295507c2e7 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java @@ -1971,7 +1971,7 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo if (targetThreads != null) { for (IExecutionDMContext thread : targetThreads) { if (thread instanceof IMIExecutionDMContext) { - results.add(Integer.toString(((IMIExecutionDMContext)thread).getThreadId())); + results.add(((IMIExecutionDMContext)thread).getThreadId()); } else { // If any of the threads is not an IMIExecutionDMContext, // we don't support thread filters at all. diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsSynchronizer.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsSynchronizer.java index fe1f1bbfb57..8aaa1b18b97 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsSynchronizer.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsSynchronizer.java @@ -333,8 +333,8 @@ public class MIBreakpointsSynchronizer extends AbstractDsfService implements IMI set.add(id); try { - int threadId = Integer.parseInt(data.getThreadId()); - if (threadId > 0) { + String threadId = data.getThreadId(); + if (!threadId.equals("0")) { //$NON-NLS-1$ IDsfBreakpointExtension bpExtension = (IDsfBreakpointExtension)((ICBreakpoint)plBpt).getExtension( MIBreakpointsManager.GDB_DEBUG_MODEL_ID, ICBreakpointExtension.class); @@ -353,7 +353,7 @@ public class MIBreakpointsSynchronizer extends AbstractDsfService implements IMI List list = new ArrayList(execDMCs.length); for (IExecutionDMContext c : execDMCs) { if (c instanceof IMIExecutionDMContext - && ((IMIExecutionDMContext)c).getThreadId() != threadId) { + && !((IMIExecutionDMContext)c).getThreadId().equals(threadId)) { list.add(c); } } @@ -371,9 +371,6 @@ public class MIBreakpointsSynchronizer extends AbstractDsfService implements IMI catch(CoreException e) { GdbPlugin.log(e.getStatus()); } - catch(NumberFormatException e) { - GdbPlugin.log(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, "Invalid thread id")); //$NON-NLS-1$ - } } } }); @@ -515,13 +512,12 @@ public class MIBreakpointsSynchronizer extends AbstractDsfService implements IMI if (execDMCs == null) { execDMCs = new IExecutionDMContext[0]; } - int threadNum = Integer.parseInt(threadId); for (IExecutionDMContext execDMC : execDMCs) { - if (execDMC instanceof IMIExecutionDMContext - && ((IMIExecutionDMContext)execDMC).getThreadId() == threadNum) { - // The platform breakpoint is already restricted to the given thread. - return; - } + String ctxThreadId = ((IMIExecutionDMContext)execDMC).getThreadId(); + if (execDMC instanceof IMIExecutionDMContext && ctxThreadId.equals(threadId)) { + // The platform breakpoint is already restricted to the given thread. + return; + } } IExecutionDMContext[] newExecDMCs = new IExecutionDMContext[execDMCs.length + 1]; System.arraycopy(execDMCs, 0, newExecDMCs, 0, execDMCs.length); @@ -531,9 +527,6 @@ public class MIBreakpointsSynchronizer extends AbstractDsfService implements IMI threadId); bpExtension.setThreadFilters(newExecDMCs); } - catch(NumberFormatException e) { - GdbPlugin.log(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, "Invalid thread id")); //$NON-NLS-1$ - } catch(CoreException e) { GdbPlugin.log(e); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java index c590274c35a..aa4e307cf42 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java @@ -109,20 +109,10 @@ public class MIProcesses extends AbstractDsfService implements IMIProcesses, ICa * @return */ @Override - public int getThreadId(){ - try { - return Integer.parseInt(fThreadId); - } catch (NumberFormatException e) { - } - - return 0; + public String getThreadId(){ + return fThreadId; } - // Enable if need arises -// public String getId(){ -// return fThreadId; -// } - @Override public String toString() { return baseToString() + ".thread[" + fThreadId + "]"; } //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java index d89fc67fb02..0966658c2d8 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java @@ -108,7 +108,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I /** * Integer ID that is used to identify the thread in the GDB/MI protocol. */ - private final int fThreadId; + private final String fThreadId; /** * Constructor for the context. It should not be called directly by clients. @@ -122,7 +122,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I * @param containerDmc The container that this context belongs to. * @param threadId GDB/MI thread identifier. */ - protected MIExecutionDMC(String sessionId, IContainerDMContext containerDmc, int threadId) { + protected MIExecutionDMC(String sessionId, IContainerDMContext containerDmc, String threadId) { super(sessionId, containerDmc != null ? new IDMContext[] { containerDmc } : new IDMContext[0]); fThreadId = threadId; } @@ -132,7 +132,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I * @return */ @Override - public int getThreadId(){ + public String getThreadId(){ return fThreadId; } @@ -141,11 +141,11 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I @Override public boolean equals(Object obj) { - return super.baseEquals(obj) && ((MIExecutionDMC)obj).fThreadId == fThreadId; + return super.baseEquals(obj) && ((MIExecutionDMC)obj).fThreadId.equals(fThreadId); } @Override - public int hashCode() { return super.baseHashCode() ^ fThreadId; } + public int hashCode() { return super.baseHashCode() + fThreadId.hashCode(); } } @Immutable @@ -417,7 +417,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I */ protected MIStoppedEvent fSilencedSignalEvent; - private static final int FAKE_THREAD_ID = 0; + private static final String FAKE_THREAD_ID = "0"; //$NON-NLS-1$ public MIRunControl(DsfSession session) { super(session); @@ -474,7 +474,10 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I /** @since 2.0 */ protected ICommandControlService getConnection() { return fConnection; } - public IMIExecutionDMContext createMIExecutionContext(IContainerDMContext container, int threadId) { + /** + * @since 5.0 + */ + public IMIExecutionDMContext createMIExecutionContext(IContainerDMContext container, String threadId) { return new MIExecutionDMC(getSession().getId(), container, threadId); } @@ -583,7 +586,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I @DsfServiceEventHandler public void eventDispatched(final MIThreadCreatedEvent e) { IContainerDMContext containerDmc = e.getDMContext(); - IMIExecutionDMContext executionCtx = e.getStrId() != null ? createMIExecutionContext(containerDmc, e.getId()) : null; + IMIExecutionDMContext executionCtx = e.getStrId() != null ? createMIExecutionContext(containerDmc, e.getStrId()) : null; getSession().dispatchEvent(new StartedDMEvent(executionCtx, e), getProperties()); } @@ -596,7 +599,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I @DsfServiceEventHandler public void eventDispatched(final MIThreadExitEvent e) { IContainerDMContext containerDmc = e.getDMContext(); - IMIExecutionDMContext executionCtx = e.getStrId() != null ? createMIExecutionContext(containerDmc, e.getId()) : null; + IMIExecutionDMContext executionCtx = e.getStrId() != null ? createMIExecutionContext(containerDmc, e.getStrId()) : null; getSession().dispatchEvent(new ExitedDMEvent(executionCtx, e), getProperties()); } @@ -903,7 +906,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I } else { IExecutionDMContext[] executionDmcs = new IMIExecutionDMContext[info.getThreadIds().length]; for (int i = 0; i < info.getThreadIds().length; i++) { - executionDmcs[i] = createMIExecutionContext(containerCtx, info.getThreadIds()[i]); + executionDmcs[i] = createMIExecutionContext(containerCtx, info.getStrThreadIds()[i]); } return executionDmcs; } @@ -1562,7 +1565,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I attr.put(MIBreakpoints.FILE_NAME, debuggerPath); attr.put(MIBreakpoints.LINE_NUMBER, lineNumber); attr.put(MIBreakpointDMData.IS_TEMPORARY, true); - attr.put(MIBreakpointDMData.THREAD_ID, Integer.toString(threadExecDmc.getThreadId())); + attr.put(MIBreakpointDMData.THREAD_ID, threadExecDmc.getThreadId()); // Now do the operation moveToLocation(context, location, attr, rm); @@ -1609,7 +1612,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I attr.put(MIBreakpoints.BREAKPOINT_TYPE, MIBreakpoints.BREAKPOINT); attr.put(MIBreakpoints.ADDRESS, "0x" + address.toString(16)); //$NON-NLS-1$ attr.put(MIBreakpointDMData.IS_TEMPORARY, true); - attr.put(MIBreakpointDMData.THREAD_ID, Integer.toString(threadExecDmc.getThreadId())); + attr.put(MIBreakpointDMData.THREAD_ID, threadExecDmc.getThreadId()); // Now do the operation moveToLocation(context, location, attr, rm); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java index 6ceba848873..c319eb8e280 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java @@ -285,7 +285,7 @@ implements IStack, ICachingService { it will eliminate the issue with invalid data on subsequent invocations. We don't cache errors. */ @SuppressWarnings("serial") - private class FramesCache extends HashMap { + private class FramesCache extends HashMap { public void clear(IDMContext context) { final IMIExecutionDMContext execDmc = DMContexts.getAncestorOfType(context, IMIExecutionDMContext.class); if (execDmc != null) { @@ -295,7 +295,7 @@ implements IStack, ICachingService { }; } - public FramesCacheInfo getThreadFramesCache(int threadId) { + public FramesCacheInfo getThreadFramesCache(String threadId) { FramesCacheInfo info = get(threadId); if (info == null) { put(threadId, info = new FramesCacheInfo()); @@ -303,13 +303,13 @@ implements IStack, ICachingService { return info; } - public FramesCacheInfo update(int threadId, int stackDepth, int maxRequestedStackDepth) { + public FramesCacheInfo update(String threadId, int stackDepth, int maxRequestedStackDepth) { FramesCacheInfo info = getThreadFramesCache(threadId); info.setStackDepth(stackDepth, maxRequestedStackDepth); return info; } - public FramesCacheInfo update(int threadId, MIStackListFramesInfo framesInfo) { + public FramesCacheInfo update(String threadId, MIStackListFramesInfo framesInfo) { FramesCacheInfo info = getThreadFramesCache(threadId); if (framesInfo != null) { int len = framesInfo.getMIFrames().length; @@ -507,9 +507,10 @@ implements IStack, ICachingService { } } + String threadId = execDmc.getThreadId(); // if requested stack limit is bigger then currently cached this call will return -1 final int maxDepth = endIndex > 0 ? endIndex + 1 : -1; - int depth = fFramesCache.getThreadFramesCache(execDmc.getThreadId()).getStackDepth( + int depth = fFramesCache.getThreadFramesCache(threadId).getStackDepth( maxDepth); if (depth > 0) { // our stack depth cache is good so we can use it to fill levels array rm.setData(getDMFrames(execDmc, startIndex, endIndex, depth)); @@ -524,7 +525,7 @@ implements IStack, ICachingService { // getStackDepth call would have updated cache for us. // We use same handler on success or error, since gdb is unreliable when comes to frame retrieval // we will return frames array even if we get error when attempting to get stack depth. - int stackDepth = fFramesCache.getThreadFramesCache(execDmc.getThreadId()).getValidStackDepth(); + int stackDepth = fFramesCache.getThreadFramesCache(threadId).getValidStackDepth(); rm.done(getDMFrames(execDmc, startIndex, endIndex, stackDepth)); } }); @@ -612,7 +613,7 @@ implements IStack, ICachingService { return; } - final int threadId = execDmc.getThreadId(); + String threadId = execDmc.getThreadId(); final int frameLevel = miFrameDmc.fLevel; FrameData fd = fFramesCache.getThreadFramesCache(threadId).getFrameData(frameLevel); if (fd != null) { @@ -1026,8 +1027,7 @@ implements IStack, ICachingService { return; } - final int threadId = execDmc.getThreadId(); - + String threadId = execDmc.getThreadId(); // Check our internal cache first because different commands can // still be re-used. int depth = fFramesCache.getThreadFramesCache(threadId).getStackDepth(maxDepth); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/AbstractMIControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/AbstractMIControl.java index 67b2e02108d..1e116794ec4 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/AbstractMIControl.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/AbstractMIControl.java @@ -582,7 +582,7 @@ public abstract class AbstractMIControl extends AbstractDsfService public String getThreadId() { IMIExecutionDMContext execCtx = DMContexts.getAncestorOfType(fCommand.getContext(), IMIExecutionDMContext.class); if(execCtx != null) - return Integer.toString(execCtx.getThreadId()); + return execCtx.getThreadId(); return null; } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java index 34929834fcb..d32e1e325ad 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/CommandFactory.java @@ -428,15 +428,21 @@ public class CommandFactory { return new MIBreakInsert(ctx, func, false); } + /** + * @since 5.0 + */ public ICommand createMIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, boolean isHardware, String condition, int ignoreCount, - String line, int tid) { + String line, String tid) { return new MIBreakInsert(ctx, isTemporary, isHardware, condition, ignoreCount, line, tid, false); } + /** + * @since 5.0 + */ public ICommand createMIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, boolean isHardware, String condition, int ignoreCount, - String location, int tid, boolean disabled, boolean isTracepoint) { + String location, String tid, boolean disabled, boolean isTracepoint) { return new MIBreakInsert(ctx, isTemporary, isHardware, condition, ignoreCount, location, tid, disabled, isTracepoint, false); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIBreakInsert.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIBreakInsert.java index 0751c5e32e4..489094330ba 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIBreakInsert.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/commands/MIBreakInsert.java @@ -66,12 +66,12 @@ public class MIBreakInsert extends MICommand { /** @since 4.0 */ public MIBreakInsert(IBreakpointsTargetDMContext ctx, String func, boolean allowPending) { - this(ctx, false, false, null, 0, func, 0, allowPending); + this(ctx, false, false, null, 0, func, "0", allowPending); //$NON-NLS-1$ } - /** @since 4.0 */ + /** @since 5.0*/ public MIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, boolean isHardware, - String condition, int ignoreCount, String line, int tid, boolean allowPending) { + String condition, int ignoreCount, String line, String tid, boolean allowPending) { this(ctx, isTemporary, isHardware, condition, ignoreCount, line, tid, false, false, allowPending); } @@ -79,10 +79,10 @@ public class MIBreakInsert extends MICommand * This constructor allows to specify if the breakpoint should actually be * a tracepoint (this will only work starting with GDB 7.1) * It also includes if a breakpoint should be created disabled (starting GDB 7.0) - * @since 4.0 + * @since 5.0 */ public MIBreakInsert(IBreakpointsTargetDMContext ctx, boolean isTemporary, boolean isHardware, - String condition, int ignoreCount, String location, int tid, boolean disabled, boolean isTracepoint, + String condition, int ignoreCount, String location, String tid, boolean disabled, boolean isTracepoint, boolean allowPending) { super(ctx, "-break-insert"); //$NON-NLS-1$ @@ -94,7 +94,7 @@ public class MIBreakInsert extends MICommand // and passcounts cannot be set by a -break-insert ignoreCount = 0; // GDB 7.1 only supports tracepoints that apply to all threads - tid = 0; + tid = "0"; //$NON-NLS-1$ } // Determine the number of optional parameters that are present @@ -112,7 +112,7 @@ public class MIBreakInsert extends MICommand if (ignoreCount > 0) { i += 2; } - if (tid > 0) { + if (!tid.equals("0")) { //$NON-NLS-1$ i += 2; } if (disabled) { @@ -150,10 +150,10 @@ public class MIBreakInsert extends MICommand opts[i] = Integer.toString(ignoreCount); i++; } - if (tid > 0) { + if (!tid.equals("0")) { //$NON-NLS-1$ opts[i] = "-p"; //$NON-NLS-1$ i++; - opts[i] = Integer.toString(tid); + opts[i] = tid; i++; } if (disabled) { diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/CLIThreadInfo.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/CLIThreadInfo.java index 14d94fbbda9..f911e821c41 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/CLIThreadInfo.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/output/CLIThreadInfo.java @@ -23,14 +23,17 @@ import java.util.regex.Pattern; */ public class CLIThreadInfo extends MIInfo { - private Integer fCurrentThread; + private String fCurrentThread; public CLIThreadInfo(MIOutput out) { super(out); parse(); } - public Integer getCurrentThread(){ + /** + * @since 5.0 + */ + public String getCurrentThread(){ return fCurrentThread; } @@ -56,7 +59,7 @@ public class CLIThreadInfo extends MIInfo { Matcher matcher = pattern.matcher(str); if (matcher.find()) { String id = matcher.group(1).trim(); - fCurrentThread = Integer.parseInt(id); + fCurrentThread = id; } } } diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java index 6c02912e4e8..aabb0d98d6e 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java @@ -209,7 +209,7 @@ public class SyncUtil { @Override protected void execute(DataRequestMonitor rm) { fGdbControl.queueCommand( - fCommandFactory.createMIBreakInsert(bpTargetDmc, temporary, false, null, 0, location, 0), + fCommandFactory.createMIBreakInsert(bpTargetDmc, temporary, false, null, 0, location, "0"), rm); } }; diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTargetAvailableTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTargetAvailableTest.java index 6c4b0781665..05dc4cd5891 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTargetAvailableTest.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTargetAvailableTest.java @@ -116,7 +116,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -164,7 +164,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -215,7 +215,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -224,7 +224,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHi", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHi", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -233,7 +233,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -286,7 +286,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -295,7 +295,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, "invalid condition", 0, "PrintHi", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, "invalid condition", 0, "PrintHi", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -304,7 +304,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -345,7 +345,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -354,7 +354,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHi", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHi", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -363,7 +363,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -422,7 +422,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintHello", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -431,7 +431,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, "invalid condition", 0, "PrintHi", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, "invalid condition", 0, "PrintHi", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }}, new Step() { @@ -440,7 +440,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, "PrintBonjour", "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -499,7 +499,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -567,7 +567,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm)); }} }; @@ -642,7 +642,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { final IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm) { @Override protected void handleSuccess() { @@ -652,7 +652,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { @Override public void execute(final RequestMonitor rm) { fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), null)); }}}, new RequestMonitor(fGDBCtrl.getExecutor(), null)); @@ -709,7 +709,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { final IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm) { @Override protected void handleSuccess() { @@ -719,7 +719,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { @Override public void execute(final RequestMonitor otherRm) { fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), otherRm)); }}}, new RequestMonitor(fGDBCtrl.getExecutor(), null)); @@ -786,7 +786,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { final IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm) { @Override protected void handleSuccess() { @@ -796,7 +796,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { @Override public void execute(final RequestMonitor otherRm) { fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), otherRm)); }}}, rm); }}); @@ -851,7 +851,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { final IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(fContainerDmc, IBreakpointsTargetDMContext.class); fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), rm) { @Override protected void handleSuccess() { @@ -861,7 +861,7 @@ public class MIRunControlTargetAvailableTest extends BaseParametrizedTestCase { @Override public void execute(final RequestMonitor otherRm) { fGDBCtrl.queueCommand( - fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, 0), + fGDBCtrl.getCommandFactory().createMIBreakInsert(bpTargetDmc, true, false, null, 0, location2, "0"), new DataRequestMonitor (fGDBCtrl.getExecutor(), otherRm)); }}}, rm); }}); diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java index e282455078d..65574f07487 100644 --- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java +++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java @@ -296,7 +296,7 @@ public class MIRunControlTest extends BaseParametrizedTestCase { // We check this _after_ we ask for the execution contexts because when running remote (i.e., with gdbserver), // thread events are not sent by gdb until a request for a thread list is given (Bug 455992) IStartedDMEvent startedEvent = startedEventWaitor.waitForEvent(TestsPlugin.massageTimeout(1000)); - Assert.assertEquals("Thread created event is for wrong thread id", sProgramIsCygwin ? 3 : 2, ((IMIExecutionDMContext)startedEvent.getDMContext()).getThreadId()); + Assert.assertEquals("Thread created event is for wrong thread id", sProgramIsCygwin ? "3" : "2", ((IMIExecutionDMContext)startedEvent.getDMContext()).getThreadId()); /* * Get data @@ -350,7 +350,7 @@ public class MIRunControlTest extends BaseParametrizedTestCase { fRunCtrl.getExecutor().submit(new Runnable() { @Override public void run() { - fRunCtrl.getExecutionData(((MIRunControl)fRunCtrl).createMIExecutionContext(containerDmc, 1), rm); + fRunCtrl.getExecutionData(((MIRunControl)fRunCtrl).createMIExecutionContext(containerDmc, "1"), rm); } }); wait.waitUntilDone(TestsPlugin.massageTimeout(5000));