mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 17:05:26 +02:00
Use the qualified name when creating a register.
Destroy the corresponding gdb variable on register's disposal. Added the "dispose" method to the "Register" class.
This commit is contained in:
parent
d72d34cf02
commit
c59a365bc3
3 changed files with 43 additions and 2 deletions
|
@ -1,3 +1,11 @@
|
|||
2004-11-19 Alain Magloire
|
||||
Use the qualified name when creating a register.
|
||||
Destroy the corresponding gdb variable on register's disposal.
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
|
||||
|
||||
Added the "dispose" method.
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
|
||||
|
||||
2004-11-19 Alain Magloire
|
||||
RegisterManager.findRegister() was not implemented correctly
|
||||
* cdi/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
|
||||
|
|
|
@ -32,12 +32,14 @@ import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
|
|||
import org.eclipse.cdt.debug.mi.core.command.MIDataListChangedRegisters;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIVarCreate;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIVarDelete;
|
||||
import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIVar;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIVarChange;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIVarUpdateInfo;
|
||||
|
@ -102,7 +104,7 @@ public class RegisterManager extends Manager {
|
|||
Register reg = findRegister(regDesc);
|
||||
if (reg == null) {
|
||||
try {
|
||||
String name = "$" + regDesc.getName(); //$NON-NLS-1$
|
||||
String name = regDesc.getQualifiedName(); //$NON-NLS-1$
|
||||
Target target = (Target)regDesc.getTarget();
|
||||
MISession mi = target.getMISession();
|
||||
CommandFactory factory = mi.getCommandFactory();
|
||||
|
@ -127,7 +129,28 @@ public class RegisterManager extends Manager {
|
|||
Target target = (Target)reg.getTarget();
|
||||
List regList = (List)regsMap.get(target);
|
||||
if (regList != null) {
|
||||
regList.remove(reg);
|
||||
if (regList.remove(reg)) {
|
||||
MISession miSession = target.getMISession();
|
||||
try {
|
||||
removeMIVar(miSession, reg.getMIVar());
|
||||
} catch (CDIException e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tell gdb to remove the underlying var-object also.
|
||||
*/
|
||||
void removeMIVar(MISession miSession, MIVar miVar) throws CDIException {
|
||||
CommandFactory factory = miSession.getCommandFactory();
|
||||
MIVarDelete var = factory.createMIVarDelete(miVar.getVarName());
|
||||
try {
|
||||
miSession.postCommand(var);
|
||||
var.getMIInfo();
|
||||
} catch (MIException e) {
|
||||
throw new MI2CDIException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,11 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.mi.core.cdi.model;
|
||||
|
||||
import org.eclipse.cdt.debug.core.cdi.CDIException;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister;
|
||||
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
|
||||
import org.eclipse.cdt.debug.mi.core.cdi.Session;
|
||||
import org.eclipse.cdt.debug.mi.core.output.MIVar;
|
||||
|
||||
/**
|
||||
|
@ -53,4 +57,10 @@ public class Register extends Variable implements ICDIRegister {
|
|||
return new Register(target, thread, frame, name, fullName, pos, depth, miVar);
|
||||
}
|
||||
|
||||
public void dispose() throws CDIException {
|
||||
ICDITarget target = getTarget();
|
||||
RegisterManager regMgr = ((Session)target.getSession()).getRegisterManager();
|
||||
regMgr.destroyRegister(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue