近日有不少用户报告CnPack IDE 专家包在最新的版本的Delphi上存在问题,经总结有以下几个较难解决,目前仍无修复思路的。
一、代码高亮左右错位绘制问题
D10.4及以上版本,IDE自身的代码编辑器在第一次打开后,会有一个时机不确定的左侧栏宽度横向突变的动作。
该动作影响CnWizards的代码高亮,会出现左右高亮绘制错位。手工滚动触发重绘后消失。
二、LSP模式下代码输入助手与IDE冲突的问题
D11或以上版本,尤其是D12,LSP获取符号列表是异步模式。当代码输入助手准备弹出而调用LSP的ToolsAPI接口,
异步等待结果回来时,如果等待期间用户又通过代码中按点号触发了IDE自己的代码提示,则两者冲突,大概率出访问冲突错误。
抓到的调用堆栈:
[6EB55D65]{coreide290.bpl} CodCmplt.TCodeCompletionManager.HandleAsyncInvokeCodeCompletionResult (Line 1345, CodCmplt.pas + 8) + $0
[6F5803DA]{rtl290.bpl } System.@IsClass (Line 18928, System.pas + 1) + $8
[6E3CD047]{vcl290.bpl } Vcl.Themes.TStyleManager.GetStyle (Line 5823, Vcl.Themes.pas + 7) + $D
[6E3CD135]{vcl290.bpl } Vcl.Themes.TStyleManager.GetStyle (Line 5834, Vcl.Themes.pas + 18) + $1E
[6F57A294]{rtl290.bpl } System.@FreeMem (Line 5012, System.pas + 20) + $0
[6F57FFEC]{rtl290.bpl } System.TObject.FreeInstance (Line 18364, System.pas + 2) + $2
[6F5807B6]{rtl290.bpl } System.@ClassDestroy (Line 19728, System.pas + 0) + $2
[6F5800D5]{rtl290.bpl } System.TObject.Destroy (Line 18419, System.pas + 1) + $4
[6EB5FC5A]{coreide290.bpl} CodCmplt.TAsyncStatusList.FindId (Line 4980, CodCmplt.pas + 9) + $D
[6EB55D54]{coreide290.bpl} CodCmplt.TCodeCompletionManager.HandleAsyncInvokeCodeCompletionResult (Line 1339, CodCmplt.pas + 2) + $8
[6EB55CDC]{coreide290.bpl} CodCmplt.TCodeCompletionManager.AsyncInvokeCodeCompletionResult (Line 1305, CodCmplt.pas + 24) + $12
[6BA28751]{IDELSP290.bpl} LSPCodCmplt.TLSPKibitzManager.AsyncCodeCompletionResult (Line 1360, LSPCodCmplt.pas + 4) + $10
[6BA1A228]{IDELSP290.bpl} BaseLSPServer.TLSPServer.HandleError (Line 1192, BaseLSPServer.pas + 7) + $E
[6F58A780]{rtl290.bpl } System.UTF8ToUnicodeString (Line 40663, System.pas + 7) + $5
[6BA194F7]{IDELSP290.bpl} BaseLSPServer.TLSPServer.LSPServerNewLine$ActRec.$12$Body (Line 1068, BaseLSPServer.pas + 3) + $20
[6F6A0747]{rtl290.bpl } System.Classes.CheckSynchronize (Line 16336, System.Classes.pas + 34) + $A
[61FBF102]{CnWizards_D120A.DLL} CnWizNotifier.TCnWizNotifierServices.DoGetMsg$qqrp6HWND__rx24Winapi.Messages.TMessage (Line 2012, CnWizNotifier.pas + 1) + $17
[6A8C3B63]{fmx290.bpl } FMX.Platform.Win.TPlatformWin.ThreadSync (Line 3658, FMX.Platform.Win.pas + 3) + $2
[6F6A4E60]{rtl290.bpl } System.Classes.StdWndProc (Line 19091, System.Classes.pas + 8) + $0
[62186AF1]{CnWizards_D120A.DLL} CnSrcEditorMisc.TCnSrcEditorMisc.OnAppMessage (Line 492, CnSrcEditorMisc.pas + 67) + $50
[6E4148B3]{vcl290.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 13376, Vcl.Forms.pas + 23) + $1
[6E4148F6]{vcl290.bpl } Vcl.Forms.TApplication.HandleMessage (Line 13406, Vcl.Forms.pas + 1) + $4
[6E414C35]{vcl290.bpl } Vcl.Forms.TApplication.Run (Line 13545, Vcl.Forms.pas + 27) + $3
[006D8B12]{bds.exe } bds.bds + $DE
三、代码格式化偶出死循环
针对当前源码文件进行格式化时,无论是按默认热键Ctrl+W,或是从编辑器工具栏、或菜单入口中执行格式化,均有一定概率导致IDE界面挂起,猜测是格式化代码在碰到特定Pascal代码的特定写法时触发Bug陷入死循环,但目前仍尚未找到哪里的死循环。
四、代码输入助手弹出框绘制内容错乱
高版本Delphi中,尤其是支持主题的IDE里,代码输入助手弹出时,其弹出框有一定概率出现背景混乱,譬如把编辑器左上角一些内容给复制到弹出框的空白部分,尚无解决思路。
|