EAS调试技巧分享原创
金蝶云社区-QB不可能那么萌
QB不可能那么萌
7人赞赏了该文章 1,125次浏览 未经作者许可,禁止转载编辑于2021年08月13日 10:32:52
summary-icon摘要由AI智能服务提供

本文分享了调试EAS问题时的常见方法,包括如何定位前台发送RPC请求的源头、追踪GUI弹窗提示的来源、监控控件值的变化位置,以及通过RPC日志找到并定位执行耗时SQL的代码位置。每个问题均提供了具体的调试步骤和示例,旨在帮助开发者更有效地解决问题。

在调试跟踪EAS问题的过程中,经常会遇到一些问题不知道从何跟起,这里分享一下常见问题的调试方法,如有问题欢迎大家指正【emoji】。


问题一:知道后台执行的地方,但是想定位前台哪里发送的rpc请求

调试方法:

  1. 断点后台代码

  2. 后台线程暂挂时,找到客户端的AWT-EventQueue-2线程

  3. 点击suspend(暂挂),即可查看客户端调用发起的地方


问题二:前台有弹窗提示,需要定位是哪里给出的提示

调试方法:

GUI弹窗类为com.kingdee.eas.util.client.MsgBox,

代码中基本都是调用此类中的方法给出弹框提示 例如:showInfo(), showWarning()…

如不知弹框的具体类型, 可直接在com.kingdee.bos.ctrl.swing.KDDialog.show()方法断点 ,即可根据堆栈跟踪到弹框的代码位置。


问题三:控件值发生改变,想要定位到是哪个地方改变了控件值

调试方法:

直接在控件的设值方法中打条件断点跟踪。

以F7为例: 可直接在 com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox.setData(Object, boolean, boolean) 方法打断点。因为所有F7设值都会进入此方法,我们需要设置断点条件跟踪具体某个F7在哪里设置。

可以通过通过快捷键alt+shift+d调出客户端调试界面,获得控件的名称,通过名称设置过滤条件

例如:”bizPromptSupplier”. equals(this.getName())。即可只跟踪bizPromptSupplier这个F7的设值。其他控件如文本,下拉框,日期控件等都可使用类似的方法跟踪值变的调用。

特殊说一下表格控件,表格设值的方法为:com.kingdee.bos.ctrl.kdf.table.KDTable.XCell.setValue(Object),可以使用用行和列的索引值作为断点条件跟踪指定行列的值变, 例如:3==index.getColIndex()&&2==index.getRowIndex(),跟踪第4列,第3行的值改变(行列的索引值从0开始)。


问题四:通过RPC日志发现一条耗时的sql,想定位到执行sql的代码位置

调试方法:

  1. 通过ctrl+alt+]录制工具,录制后找到此sql

  2. 对应在com.kingdee.bos.sql.shell.KDStatement.execute(String) com.kingdee.bos.sql.shell.KDPreparedStatement.executeBatch() 等方法中断点,通过ksql等内部变量过滤sql内容,例如: ksql.contains("Fqty")。



赞 7