简体   繁体   English

如何更改基于CDT的eclipse调试器中线程组显示中的文本?

[英]How to change the text in the thread group display in CDT-based eclipse debugger?

I have a CDT-based debugger and want to add some information into the lettering in the thread node. 我有一个基于CDT的调试器,并希望在线程节点中的字母中添加一些信息。 I want the lettering surrounded by the red rectangle to display some additional information (see screenshot below). 我希望红色矩形包围的字母显示一些额外的信息(见下面的截图)。

截图

AFAIR, the format string for this label is set in the property ThreadVMNode_No_columns__text_format in file C:\\Users\\...\\workspace\\org.eclipse.cdt.dsf.gdb.ui\\src\\org\\eclipse\\cdt\\dsf\\gdb\\internal\\ui\\viewmodel\\launch\\MessagesForGdbLaunchVM.properties . AFAIR,此标签的格式字符串在文件C:\\Users\\...\\workspace\\org.eclipse.cdt.dsf.gdb.ui\\src\\org\\eclipse\\cdt\\dsf\\gdb\\internal\\ui\\viewmodel\\launch\\MessagesForGdbLaunchVM.properties中的属性ThreadVMNode_No_columns__text_format中设置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}})

This format string is used in method org.eclipse.cdt.dsf.gdb.internal.ui.viewmodel.launch.ThreadVMNode.createLabelProvider() : 此格式字符串用于方法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 in order to add a new piece of information to the display it is necessary to AFAIK为了向显示器添加新的信息是必要的

  1. override the format string MessagesForGdbLaunchVM.properties and 覆盖格式字符串MessagesForGdbLaunchVM.properties
  2. add the new string into the string array in the call to the constructor GdbExecutionContextLabelText . 在对构造函数GdbExecutionContextLabelText的调用中将新字符串添加到字符串数组中。

What is the best way to do both these things (preferably not changing the code of the Eclipse/CDT core classes) ? 执行这两项操作的最佳方法是什么(最好不要更改Eclipse / CDT核心类的代码)?

Update 1 (12.09.2014 19:56 MSK): Tried to use a custom debug presentation model by adding an extension, but the class MyCompanyDebugModelPresentation is not called anyhwere. 更新1(12.09.2014 19:56 MSK):试图通过添加扩展来使用自定义调试表示模型,但是类MyCompanyDebugModelPresentation不会被称为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>

In order to modify the text shown above, you need to modify a number of files and settings, which are shown in the matrix below. 要修改上面显示的文本,您需要修改一些文件和设置,如下面的矩阵所示。

形态矩阵

You can read this image as follows: 您可以按如下方式阅读此图像:

  1. In your project, specify the extension point org.eclipse.core.run.adapters (start of the red line) so that it points to 在你的项目中,指定扩展点org.eclipse.core.run.adapters (红线的起点),使其指向
  2. your subclass of GdbAdapterFactory . 你的GdbAdapterFactory的子类。
  3. Modify that class so that it returns your subclass of GdbViewModelAdapter etc. 修改该类,使其返回GdbViewModelAdapter等的子类。

You go through that chain until you arrive at the ThreadVMNode class (or your subclass), which determines what values are shown in the tree. 您将遍历该链,直到到达ThreadVMNode类(或您的子类),该类确定树中显示的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM