Ho un debugger basato su CDT e voglio aggiungere alcune informazioni nel lettering nel nodo thread. Voglio che le scritte siano circondate dal rettangolo rosso per visualizzare alcune informazioni aggiuntive (vedi screenshot qui sotto).Come modificare il testo nella visualizzazione del gruppo di thread nel debugger Eclipse basato su CDT?
AFAIR, la stringa di formato per questa etichetta si trova nella proprietà ThreadVMNode_No_columns__text_format
nel file di C:\Users\...\workspace\org.eclipse.cdt.dsf.gdb.ui\src\org\eclipse\cdt\dsf\gdb\internal\ui\viewmodel\launch\MessagesForGdbLaunchVM.properties
.
# {0} - name available, 0=not available/1=available
# {1} - name
# {2} - ID available, 0=not available/1=available
# {3} - ID
# {4} - OS Thread ID available, 0=not available/1=available
# {5} - OS Thread ID
# {6} - Core available, 0=not available/1=available
# {7} - Core
# {8} - 0=running/1=suspended
# {9} - state change reason available, 0=not available/1=available
# {10} - state change reason
# {11} - state change details available, 0=not available/1=available
# {12} - state change details
ThreadVMNode_No_columns__text_format={0,choice,0#Thread|1#{1}}{2,choice,0#|1# [{3}]}{4,choice,0#|1# {5}}{6,choice,0#|1# [core: {7}]} ({8,choice,0#Running|1#Suspended}{9,choice,0#|1# : {10}}{11,choice,0#|1# : {12}})
Questa stringa formato viene utilizzato nel metodo org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.launch.ThreadVMNode.createLabelProvider()
:
public class ThreadVMNode extends AbstractThreadVMNode
implements IElementLabelProvider, IElementMementoProvider
{
[...]
@Override
protected IElementLabelProvider createLabelProvider() {
PropertiesBasedLabelProvider provider = new PropertiesBasedLabelProvider();
provider.setColumnInfo(
PropertiesBasedLabelProvider.ID_COLUMN_NO_COLUMNS,
new LabelColumnInfo(new LabelAttribute[] {
// Text is made of the thread name followed by its state and state change reason.
new GdbExecutionContextLabelText(
MessagesForGdbLaunchVM.ThreadVMNode_No_columns__text_format,
new String[] {
ExecutionContextLabelText.PROP_NAME_KNOWN,
PROP_NAME,
ExecutionContextLabelText.PROP_ID_KNOWN,
ILaunchVMConstants.PROP_ID,
IGdbLaunchVMConstants.PROP_OS_ID_KNOWN,
IGdbLaunchVMConstants.PROP_OS_ID,
IGdbLaunchVMConstants.PROP_CORES_ID_KNOWN,
IGdbLaunchVMConstants.PROP_CORES_ID,
ILaunchVMConstants.PROP_IS_SUSPENDED,
ExecutionContextLabelText.PROP_STATE_CHANGE_REASON_KNOWN,
ILaunchVMConstants.PROP_STATE_CHANGE_REASON,
ExecutionContextLabelText.PROP_STATE_CHANGE_DETAILS_KNOWN,
ILaunchVMConstants.PROP_STATE_CHANGE_DETAILS}),
AFAIK per aggiungere un nuovo pezzo di informazioni al display è necessario
- sostituzione della stringa di formato
MessagesForGdbLaunchVM.properties
e - aggiungere la nuova stringa nell'array di stringhe nella chiamata al costruttore
GdbExecutionContextLabelText
.
Qual è il modo migliore per eseguire entrambe queste operazioni (preferibilmente non modificare il codice delle classi di core Eclipse/CDT)?
Update 1 (2014/12/09 19:56 MSK): tentato di utilizzare un modello di presentazione di debug personalizzato aggiungendo un'estensione, ma la classe MyCompanyDebugModelPresentation
non si chiama anyhwere.
<extension
point="org.eclipse.debug.ui.debugModelPresentations">
<debugModelPresentation
class="com.mycompany.internal.debug.ui.model.MyCompanyDebugModelPresentation"
id="com.mycompany.internal.debug.ui.model.MyCompanyDebugModelPresentation">
</debugModelPresentation>
</extension>
Ciao, hai trovato una soluzione? Ho incontrato lo stesso problema in cui il mio modello di presentazione di debug personalizzato non viene chiamato. Grazie. – Witriol
@Witriol Sì, l'ho risolto. Guarda la mia risposta qui sotto. –