2014-09-12 18 views
5

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?

Screenshot

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

  1. sostituzione della stringa di formato MessagesForGdbLaunchVM.properties e
  2. 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> 
+0

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

+0

@Witriol Sì, l'ho risolto. Guarda la mia risposta qui sotto. –

risposta

1

Al fine di modificare il testo mostrato sopra, è necessario modificare un numero di file e impostazioni, che sono mostrati nella matrice sottostante.

Morphology matrix

Si può leggere questa immagine come segue:

  1. Nel progetto, specificare il punto di estensione org.eclipse.core.run.adapters (inizio della linea rossa) in modo che punti a
  2. vostra sottoclasse di GdbAdapterFactory.
  3. Modificare quella classe in modo che restituisca la vostra sottoclasse di GdbViewModelAdapter ecc

Si passa attraverso la catena fino ad arrivare alla classe ThreadVMNode (o sottoclasse), che determina quali valori sono riportati nella struttura.

+0

Hai bisogno anche di sottoclasse * GdbLaunchDelegate *? Perché definire la propria * GdbAdapterFactory * non è sufficiente (non verrà chiamato). – Witriol

+0

@Witriol Forse. Non ricordo più e il codice non mi appartiene. –

Problemi correlati