mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-26 10:25:32 +02:00
Create a special type of ICDIVariable (ErrorVariable) if request to gdb fails.
This commit is contained in:
parent
6a09808529
commit
52e1267d4a
3 changed files with 143 additions and 15 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2003-07-22 Mikhail Khodjaiants
|
||||||
|
Create a special type of ICDIVariable (ErrorVariable) if request to gdb fails.
|
||||||
|
* CVariable.java
|
||||||
|
* CValue.java
|
||||||
|
|
||||||
2003-07-22 Mikhail Khodjaiants
|
2003-07-22 Mikhail Khodjaiants
|
||||||
Use the 'getReferencedProjects' method of 'CSourceLocator' to obtain the list of referenced projects.
|
Use the 'getReferencedProjects' method of 'CSourceLocator' to obtain the list of referenced projects.
|
||||||
Use the correct tag for additional source locations.
|
Use the correct tag for additional source locations.
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.eclipse.cdt.debug.core.cdi.model.type.ICDILongValue;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIPointerValue;
|
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIPointerValue;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIReferenceValue;
|
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIReferenceValue;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIShortValue;
|
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIShortValue;
|
||||||
|
import org.eclipse.cdt.debug.core.model.ICDebugElementErrorStatus;
|
||||||
import org.eclipse.cdt.debug.core.model.ICExpressionEvaluator;
|
import org.eclipse.cdt.debug.core.model.ICExpressionEvaluator;
|
||||||
import org.eclipse.cdt.debug.core.model.ICValue;
|
import org.eclipse.cdt.debug.core.model.ICValue;
|
||||||
import org.eclipse.debug.core.DebugException;
|
import org.eclipse.debug.core.DebugException;
|
||||||
|
@ -133,19 +134,29 @@ public class CValue extends CDebugElement implements ICValue
|
||||||
return Collections.EMPTY_LIST;
|
return Collections.EMPTY_LIST;
|
||||||
if ( fVariables.size() == 0 )
|
if ( fVariables.size() == 0 )
|
||||||
{
|
{
|
||||||
List vars = getCDIVariables();
|
try
|
||||||
|
|
||||||
if ( vars.size() > 1 )
|
|
||||||
fVariables = CArrayPartition.splitArray( this, vars, 0, vars.size() - 1 );
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
fVariables = new ArrayList( vars.size() );
|
List vars = getCDIVariables();
|
||||||
Iterator it = vars.iterator();
|
|
||||||
while( it.hasNext() )
|
if ( vars.size() > 1 )
|
||||||
|
fVariables = CArrayPartition.splitArray( this, vars, 0, vars.size() - 1 );
|
||||||
|
else
|
||||||
{
|
{
|
||||||
fVariables.add( new CModificationVariable( this, (ICDIVariable)it.next() ) );
|
fVariables = new ArrayList( vars.size() );
|
||||||
|
Iterator it = vars.iterator();
|
||||||
|
while( it.hasNext() )
|
||||||
|
{
|
||||||
|
fVariables.add( new CModificationVariable( this, (ICDIVariable)it.next() ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch( DebugException e )
|
||||||
|
{
|
||||||
|
fVariables = new ArrayList( 1 );
|
||||||
|
CModificationVariable var = new CModificationVariable( this, new CVariable.ErrorVariable( null, e ) );
|
||||||
|
var.setStatus( ICDebugElementErrorStatus.ERROR, e.getMessage() );
|
||||||
|
fVariables.add( var );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fVariables;
|
return fVariables;
|
||||||
}
|
}
|
||||||
|
@ -192,8 +203,7 @@ public class CValue extends CDebugElement implements ICValue
|
||||||
}
|
}
|
||||||
catch( CDIException e )
|
catch( CDIException e )
|
||||||
{
|
{
|
||||||
vars = new ICDIVariable[0];
|
requestFailed( "not available: ", e );
|
||||||
infoMessage( e );
|
|
||||||
}
|
}
|
||||||
return Arrays.asList( vars );
|
return Arrays.asList( vars );
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.debug.internal.core.model;
|
package org.eclipse.cdt.debug.internal.core.model;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
|
||||||
|
@ -19,9 +20,12 @@ import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIArgumentObject;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIArgumentObject;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
|
||||||
|
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
|
||||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject;
|
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject;
|
||||||
|
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
|
||||||
|
import org.eclipse.cdt.debug.core.model.ICDebugElementErrorStatus;
|
||||||
import org.eclipse.cdt.debug.core.model.ICType;
|
import org.eclipse.cdt.debug.core.model.ICType;
|
||||||
import org.eclipse.cdt.debug.core.model.ICValue;
|
import org.eclipse.cdt.debug.core.model.ICValue;
|
||||||
import org.eclipse.cdt.debug.core.model.ICVariable;
|
import org.eclipse.cdt.debug.core.model.ICVariable;
|
||||||
|
@ -47,6 +51,106 @@ public abstract class CVariable extends CDebugElement
|
||||||
ICastToType,
|
ICastToType,
|
||||||
ICastToArray
|
ICastToArray
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* The instance of this class is created when the 'getCDIVariable' call throws an exception.
|
||||||
|
*
|
||||||
|
* @since Jul 22, 2003
|
||||||
|
*/
|
||||||
|
public static class ErrorVariable implements ICDIVariable
|
||||||
|
{
|
||||||
|
private ICDIVariableObject fVariableObject;
|
||||||
|
private Exception fException;
|
||||||
|
|
||||||
|
public ErrorVariable( ICDIVariableObject varObject, Exception e )
|
||||||
|
{
|
||||||
|
fVariableObject = varObject;
|
||||||
|
fException = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getStackFrame()
|
||||||
|
*/
|
||||||
|
public ICDIStackFrame getStackFrame() throws CDIException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#getName()
|
||||||
|
*/
|
||||||
|
public String getName()
|
||||||
|
{
|
||||||
|
return ( fVariableObject != null ) ? fVariableObject.getName() : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
|
||||||
|
*/
|
||||||
|
public String getTypeName() throws CDIException
|
||||||
|
{
|
||||||
|
// TODO When the 'getType' method is moved to 'ICDIVariableObject'
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getType()
|
||||||
|
*/
|
||||||
|
public ICDIType getType() throws CDIException
|
||||||
|
{
|
||||||
|
// TODO When the 'getType' method is moved to 'ICDIVariableObject'
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getValue()
|
||||||
|
*/
|
||||||
|
public ICDIValue getValue() throws CDIException
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
|
||||||
|
*/
|
||||||
|
public boolean isEditable() throws CDIException
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(java.lang.String)
|
||||||
|
*/
|
||||||
|
public void setValue( String expression ) throws CDIException
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(org.eclipse.cdt.debug.core.cdi.model.ICDIValue)
|
||||||
|
*/
|
||||||
|
public void setValue( ICDIValue value ) throws CDIException
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat(int)
|
||||||
|
*/
|
||||||
|
public void setFormat( int format ) throws CDIException
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIObject#getTarget()
|
||||||
|
*/
|
||||||
|
public ICDITarget getTarget()
|
||||||
|
{
|
||||||
|
return ( fVariableObject != null ) ? fVariableObject.getTarget() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Exception getException()
|
||||||
|
{
|
||||||
|
return fException;
|
||||||
|
}
|
||||||
|
}
|
||||||
class InternalVariable
|
class InternalVariable
|
||||||
{
|
{
|
||||||
private ICDIVariableObject fCDIVariableObject;
|
private ICDIVariableObject fCDIVariableObject;
|
||||||
|
@ -67,10 +171,19 @@ public abstract class CVariable extends CDebugElement
|
||||||
{
|
{
|
||||||
if ( fCDIVariable == null )
|
if ( fCDIVariable == null )
|
||||||
{
|
{
|
||||||
if ( getCDIVariableObject() instanceof ICDIArgumentObject )
|
try
|
||||||
fCDIVariable = getCDISession().getVariableManager().createArgument( (ICDIArgumentObject)getCDIVariableObject() );
|
{
|
||||||
else if ( getCDIVariableObject() instanceof ICDIVariableObject )
|
if ( getCDIVariableObject() instanceof ICDIArgumentObject )
|
||||||
fCDIVariable = getCDISession().getVariableManager().createVariable( getCDIVariableObject() );
|
fCDIVariable = getCDISession().getVariableManager().createArgument( (ICDIArgumentObject)getCDIVariableObject() );
|
||||||
|
else if ( getCDIVariableObject() instanceof ICDIVariableObject )
|
||||||
|
fCDIVariable = getCDISession().getVariableManager().createVariable( getCDIVariableObject() );
|
||||||
|
}
|
||||||
|
catch( CDIException e )
|
||||||
|
{
|
||||||
|
fCDIVariable = new ErrorVariable( getCDIVariableObject(), e );
|
||||||
|
setStatus( ICDebugElementErrorStatus.ERROR,
|
||||||
|
MessageFormat.format( "not available: {0}", new String[] { e.getMessage() } ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fCDIVariable;
|
return fCDIVariable;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue