You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse修改Disassembly页面Ruler背景色报错如何解决

Eclipse 2022-06修改反汇编视图标尺背景色报错解决方案

问题基本信息

  • 运行环境:Ubuntu 20.04.4,GTK桌面,Eclipse 2022-06-R(4.24.0 嵌入式C/C++版本,内置JRE 17.0.3)
  • 触发场景:STM32调试过程中,打开首选项修改Disassembly(反汇编)页面Ruler(标尺)背景色,点击Apply按钮后弹出错误对话框
  • 弹窗提示:An error has occurred. See error log for more details. Error notifying a preference change listener. Check the log for details.
    报错弹窗截图

根因定位

从工作空间.metadata目录下的.log日志提取的报错栈显示,错误由CDT调试插件的UI渲染逻辑触发:

org.eclipse.core.runtime.AssertionFailedException: assertion failed:
      at org.eclipse.core.runtime.Assert.isTrue(Assert.java:113)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.getBaselineBias(DisassemblyRulerColumn.java:935)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.doPaint(DisassemblyRulerColumn.java:763)

这是Eclipse 2022-06自带CDT版本的已知原生bug:当反汇编视图处于打开激活状态时,修改标尺背景色会立刻触发标尺控件重绘,重绘流程中getBaselineBias方法的前置断言校验不通过,直接抛出未捕获异常。该bug仅在Linux GTK桌面环境下可稳定复现,Windows/macOS环境无此问题。

可行解决方法

按优先级从高到低排列:

  • 升级Eclipse到2022-09及更高版本:该断言bug在后续CDT迭代中已被正式修复,升级后可直接在首选项界面正常修改反汇编视图所有颜色配置,无兼容问题。
  • 手动修改配置文件绕过界面校验:
    1. 完全退出Eclipse,确保进程无残留
    2. 进入当前工作空间路径下的.metadata/.plugins/org.eclipse.core.runtime/.settings/目录
    3. 找到名为org.eclipse.cdt.dsf.debug.ui.prefs的配置文件,用文本编辑器打开
    4. 新增/修改配置项指定标尺背景色,颜色格式为RGB三通道数值,例如设置纯白色背景添加如下行:
      disassembly.ruler.background=255,255,255
      如需设置其他颜色,替换为对应RGB值即可,例如深灰背景为disassembly.ruler.background=30,30,30
    5. 保存文件后重启Eclipse,配置会自动加载生效,无需在首选项界面触发Apply操作。
  • 临时规避操作:修改颜色配置前先关闭所有打开的反汇编视图,再进入首选项修改对应颜色项,修改完成点击Apply后再打开反汇编视图,可避免重绘触发断言,但该方法偶发失效,不推荐长期使用。

完整报错日志

!SESSION 2022-06-22 10:23:51.271 -----------------------------------------------
eclipse.buildId=4.24.0.I20220607-0700
java.version=17.0.3
java.vendor=Eclipse Adoptium
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=zh_CN
Framework arguments:  -product org.eclipse.epp.package.embedcpp.product
Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.embedcpp.product

!ENTRY org.eclipse.ui 4 0 2022-06-22 10:24:11.769
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
      at org.eclipse.core.runtime.Assert.isTrue(Assert.java:113)
      at org.eclipse.core.runtime.Assert.isTrue(Assert.java:99)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.getBaselineBias(DisassemblyRulerColumn.java:935)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.doPaint(DisassemblyRulerColumn.java:763)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.doubleBufferPaint(DisassemblyRulerColumn.java:697)
      at org.eclipse.cdt.dsf.debug.internal.ui.disassembly.provisional.DisassemblyRulerColumn.lambda$1(DisassemblyRulerColumn.java:606)
      at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
      at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
      at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5794)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1529)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1555)
      at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1538)
      at org.eclipse.swt.widgets.Control.gtk_draw(Control.java:3882)
      at org.eclipse.swt.widgets.Scrollable.gtk_draw(Scrollable.java:365)
      at org.eclipse.swt.widgets.Composite.gtk_draw(Composite.java:496)
      at org.eclipse.swt.widgets.Canvas.gtk_draw(Canvas.java:174)
      at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2409)
      at org.eclipse.swt.widgets.Control.windowProc(Control.java:6832)
      at org.eclipse.swt.widgets.Display.windowProc(Display.java:6114)
      at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_do_event(Native Method)
      at org.eclipse.swt.widgets.Display.eventProc(Display.java:1552)
      at org.eclipse.swt.internal.gtk3.GTK3.gtk_main_iteration_do(Native Method)
      at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4474)
      at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
      at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
      at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
      at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
      at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
      at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
      at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
      at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
      at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
      at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
      at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:568)
      at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
      at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
      at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
      at org.eclipse.equinox.launcher.Main.main(Main.java:1440)

内容的提问来源于stack exchange,提问作者Enming Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:48:17