输出到Eclipse控制台视图的输出不一致

时间:2011-04-27 04:25:03

标签: eclipse eclipse-plugin

我正在调用编译器命令,但编译器消息不会始终显示在Eclipse控制台视图中。

我的launch()方法实现方式与第一个代码块相同 this question;我有命令行字符串设置,我用它来调用DebugPlugin.exec()方法。但是,与上述问题的作者不同,我的输出Eclipse控制台非常不一致。 Ť

当我调用命令时控制台中没有活动,并且控制台继续显示“此时无法显示控制台”。但是在从下拉菜单中调用命令很多时间并激活不同的控制台后,控制台偶尔会变为活动状态并显示消息。

我对日食的表现感到困惑,不知道如何解决这个问题。任何评论和/或建议将不胜感激。

谢谢!

- 修改

要添加更多信息,使用外部工具运行外部流程可以正常工作。我在c:\path\myprocess.exe字段中添加编译器进程Locations,并在外部工具配置窗口的Arguments字段中编译该文件。当我运行它时,所有输出都显示正常。当我通过LaunchConfigurationDelegate类以编程方式运行它时,它将无法显示。

2 个答案:

答案 0 :(得分:0)

也许尝试以编程方式将控制台置于前面,看看是否有帮助:

* Bring the console to front.
 */
public static void showConsole() {
    Display.getDefault().asyncExec(new Runnable() {
        @Override
        public void run() {
            IWorkbenchWindow window = CUIPlugin.getActiveWorkbenchWindow();
            if (window != null) {
                IWorkbenchPage page = window.getActivePage();
                if (page != null) {
                    IViewPart consoleView =
                            page.findView(IConsoleConstants.ID_CONSOLE_VIEW);
                    if (consoleView == null) {
                        IWorkbenchPart activePart = page.getActivePart();
                        try {
                            consoleView =
                                    page.showView(IConsoleConstants.ID_CONSOLE_VIEW);
                        } catch (PartInitException pie) {
                            CUIPlugin.log(pie);
                        }
                        // restore focus stolen by the creation of the
                        // console
                        page.activate(activePart);
                    } else {
                        boolean bringToTop = true;
                        if (bringToTop) {
                            page.bringToTop(consoleView);
                        }
                    }
                }
            }
        }
    });
} 

答案 1 :(得分:0)

终于开始工作了。我所做的主要更改是让MyLaunchConfigurationDelegate扩展LaunchConfigurationDelegate而不是仅实施ILaunchConfigurationDelegate。通过调试器观察时,launch {)方法经历了与MyLaunchConfigurationDelegate扩展LaunchConfigurationDelegate时通过外部工具启动的外部进程类似的代码路径。

我想我的信息不足,但我不确定代码的哪一部分更重要。

删除的另一段代码是:

IProcess dbgProcess = DebugPlugin.newProcess(launch, compilerProcess, "XVR Compiler", processAttributes);
...
launch.removeProcess(dbgProcess);

我在尝试调试此问题的不同方法时添加了它,并且在它有机会向控制台显示输出之前删除了debugProcess实际上导致了更多问题。