LiMinggang / madedit-mod

MadEdit-Mod is a cross platform Text/Hex editor(based on the madedit project @ sourceforge)
GNU General Public License v3.0
126 stars 27 forks source link

当打开输入法就会导致MadEdit.exe崩了 #325

Open ztjal opened 2 years ago

ztjal commented 2 years ago

100%重现过程:

1,安装冰凌输入法,并使其处于关闭状态,即保持当前为 英语 美式键盘 的状态。

2,直接运行MadEdit.exe(从0.4版到0.5版都行),保持光标在编辑器里边,或者应该是保持窗口的“焦点”不变。

3,通过快捷键win+空格切换输入法至冰凌输入法,MadEdit马上崩,并生成dmp文件。

但如果事先打开输入法,再运行MadEdit.exe,就没事,怎么切换都没事。

那么这个是输入法的问题吗?不是,我之前在用精灵五笔,同样的操作,[有机率]精灵五笔变成“只能输入英文”的状态,MadEdit没崩,点个桌面再点回去就能输入中文了,因不是次次都出问题,就懒得管了,不过现在找到100%重现的方法,怎么也来说一下。

Madedit_20220620T220505_1644.zip

LiMinggang commented 2 years ago

应该是输入法跟wxWidgets之间的问题,有空了我试试看

LiMinggang commented 2 years ago

刚刚试了一下,我这里没遇到,我用的ctrl+shift切换的。但是我的系统比较老win7的,输入法是刚刚从腾讯下载的 image

ztjal commented 2 years ago

我这里用的是win10 21h2、10.0.19044.1766。

和输入法的作者联系时录了个900K的桌面操作视频,MP4。

https://ztj.lanzoul.com/iElA306u68bc

LiMinggang commented 2 years ago

这是我的Win7 image

LiMinggang commented 2 years ago

看起来有可能是你系统的问题,我昨天在一台Win10上试了,还是没有复现这个问题。如果可能,你换一台机器试试

firstrose commented 2 years ago

插个嘴,这个应该是win10的问题。win10的输入法支持有问题,经常有各种各样奇怪的问题。

我在win10下面也碰到这种问题,不光是madedit,还有别的编辑器,甚至是qq. 在输入的地方切换输入法,就会出问题。之前是崩溃,现在经过好几次win10更新以后,崩溃是不大有了,但是有几乎一半的可能,窗口会卡住一段时间。

win7从来没有出现这种事情。

我用的是紫光/华宇。

ztjal commented 2 years ago

我用了台WIN10平板,X86的,系统是21h1,19043.1706。 左手持手机拍的视频,42M。 https://ztj.lanzoul.com/iI08X075yiuf

LiMinggang commented 2 years ago

这个问题就像 @firstrose 说的,基本上就是Windows,wxwidgets和输入法之间的问题,等wxwidgets 3.2发布了,可以重新编译一下试试是否有改善

LiMinggang commented 2 years ago

上传了给予wxwidgets 3.2的_rel和_dbg版本到 https://sourceforge.net/projects/madedit-mod/files/0.5.0a3/ 你先试试rel版本如果解决问题了就好,没解决再试试dbg版本,看看能不能获得更多的信息

ztjal commented 2 years ago

两个都用了,还是不行。 我把自己用的打包上传,因为是一直升级用过来的。

https://ztj.lanzoul.com/iJVUa08aaw9a

LiMinggang commented 2 years ago

debug那个出现的dmp文件你上传一下

ztjal commented 2 years ago

dmp文件都在打包里边。

LiMinggang commented 2 years ago

没看到更多的有用信息,感觉还是你系统的问题,这次的版本是在最新中文版Win10上用VS2022编译的

firstrose commented 2 years ago

@ztjal 建议换真正兼容win10的输入法。目前已知冰凌和紫光都有问题。如果实在很喜欢现在的输入法,建议换成win7,或者联系输入法作者。

ztjal commented 2 years ago

@firstrose 目前在使用“小狼豪”,WIN7是不可能使用的。

firstrose commented 2 years ago

@ztjal

这个我之前也用过。崩溃或者卡住的问题是没有,但是操作远远不如紫光方便。

LiMinggang commented 2 years ago

新安装的中文WIN10,复现不了这个问题。 我觉得不完全是输入法的问题,我确实发现wxWidgets对中文输入法的切换的支持有点问题,有时候会遇到能切换但是不能激活中文输入,但是不能稳定复现问题,想反馈给开发者也不知道怎么跟对方去说明。

ztjal commented 2 years ago

新安装的中文WIN10,复现不了这个问题。 我觉得不完全是输入法的问题,我确实发现wxWidgets对中文输入法的切换的支持有点问题,有时候会遇到能切换但是不能激活中文输入,但是不能稳定复现问题,想反馈给开发者也不知道怎么跟对方去说明。

是的,精灵五笔和小狼豪,一打开maedit再切换输入法时有很小的机率就是一个只能输入英文的“A”状态。 但不能为什么我用冰凌输入法就肯定100%挂掉,我都用了两个系统录像了,唯一想到的共通点是,装了火绒。

LiMinggang commented 2 years ago

新安装的中文WIN10,复现不了这个问题。 我觉得不完全是输入法的问题,我确实发现wxWidgets对中文输入法的切换的支持有点问题,有时候会遇到能切换但是不能激活中文输入,但是不能稳定复现问题,想反馈给开发者也不知道怎么跟对方去说明。

是的,精灵五笔和小狼豪,一打开maedit再切换输入法时有很小的机率就是一个只能输入英文的“A”状态。 但不能为什么我用冰凌输入法就肯定100%挂掉,我都用了两个系统录像了,唯一想到的共通点是,装了火绒。

如果火绒只是防火墙的话,感觉不应该监控输入法。

firstrose commented 2 years ago

我这里可以有比较大的几率复现卡住的情况,但是很少有崩溃了。可能wx确实对输入法支持有问题,但是我也观察到firefox上面也出现问题。ff也是用wx吗? @LiMinggang

我确实也用火绒,这个值得试验一下。@ztjal

LiMinggang commented 2 years ago

我这里可以有比较大的几率复现卡住的情况,但是很少有崩溃了。可能wx确实对输入法支持有问题,但是我也观察到firefox上面也出现问题。ff也是用wx吗? @LiMinggang

我确实也用火绒,这个值得试验一下。@ztjal FF应该用的不是wx,因为在wx官网上列出的应用里面没有FF。如果真用了,那么肯定是第一大用户了。为啥FF也有类似的问题?我猜都是因为主要开发者不是东亚用户,不关心也遇不到这些问题。

firstrose commented 2 years ago

我只是在反问。ff当然不是用wx了。所以结论是无解。

LiMinggang commented 2 years ago

我只是在反问。ff当然不是用wx了。所以结论是无解。

其实也算不上无解,主要是我本地复现不了。要是有开发人员能复现,至少可以挂上调试器看一眼直接原因是啥。目前看到的调用栈一点有用信息都没有。

firstrose commented 2 years ago

我是程序员,但是不会c/c++。我这里崩溃是没有,但是会有程序界面卡住一会的情况,所以抓不到崩溃的dmp 鉴于上面的讨论内容,我觉得问题应该不是出在madedit本身的代码,而是me调用的某个api。 如果你能教我如何在程序卡住的时候抓一个dmp,我可以试试。ps我有装windbg

LiMinggang commented 2 years ago

这个很难,你要是有兴趣可以打开楼主贴的那个附件,里面有崩溃时候的调用栈,里面没有任何wx或者me的函数,基本上都是windows自己的,有少量的编程接口,可以看出这是一个windows的通知消息,即,IME的变化消息,TF_Notify。最后到了这里

崩溃。即使抓到了,研究透了,估计也是微软的bug,或者是输入法的问题。 这些函数都来自于msctf_dll https://www.win7dll.info/msctf_dll.html

firstrose commented 2 years ago

https://www.cnblogs.com/saper/p/16574745.html

@ztjal @LiMinggang

ztjal commented 2 years ago

https://www.cnblogs.com/saper/p/16574745.html

@ztjal @LiMinggang

解决问题的代码那个截图太小了😒

LiMinggang commented 2 years ago

看得不是特别清晰,但看着代码还是有问题,呵呵 居然不是先检查hr,而是先release。

LiMinggang commented 2 years ago

https://www.cnblogs.com/saper/p/16574745.html @ztjal @LiMinggang

解决问题的代码那个截图太小了😒

别抱太大希望,毕竟你用的不是搜狗拼音,你用的这个输入法的代码应该跟搜狗不一样。

firstrose commented 2 years ago

@LiMinggang 我只是觉得这个帖子很有启发才发过来。具体问题点确实不大可能一样,但是结合上面的dmp,有理由怀疑是和com接口互操作的时候的问题。 如果@ztjal 能够稳定复现,可以考虑找微软那边要那个工具。

LiMinggang commented 2 years ago

@LiMinggang 我只是觉得这个帖子很有启发才发过来。具体问题点确实不大可能一样,但是结合上面的dmp,有理由怀疑是和com接口互操作的时候的问题。 如果@ztjal 能够稳定复现,可以考虑找微软那边要那个工具。

嗯,这个得看输入法的兄弟是不是给力了。如果他们有SAP那种内部调试工具的话

ztjal commented 2 years ago

输入法那边我都去联系了,暂没回复。 PartnerTTDRecorder这东西看来真的是微软的内部工具啊,网上找不到的。

LiMinggang commented 2 years ago

输入法那边我都去联系了,暂没回复。 PartnerTTDRecorder这东西看来真的是微软的内部工具啊,网上找不到的。

似乎是在windbg里面,如果你想尝试 https://blogs.windows.com/windowsdeveloper/2017/09/27/time-travel-debugging-now-available-windbg-preview/ https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-record

ztjal commented 2 years ago

WinDbg Preview我有装,但这里指的是Time Travel Debugging,和cnblogs那篇里的PartnerTTDRecorder应该不是一个东西,因为看图里边人家是给了特定的下载连接,还有压缩包的名字。

LiMinggang commented 2 years ago

time-travel-debugging-record 这个就是TTDRecorder啊,partner是给合作方的意思。我的理解是微软打算把这个慢慢给公开了,以前可能是只开放给少数合作方使用

ztjal commented 2 years ago

我试了下,感觉根本就不是同一个东西,WinDbg用Time Travel Debugging运行了一下MadEdit.exe,就10来秒,生成了两个加起来1.64G的文件……然后呢,就看看时间线上的回放一样,某个点上的调用。 无标题

但人家cnblogs那篇里的PartnerTTDRecorder里的调用是: tttracer.exe -dumpfull -attach PID -out c:\temp 这样的,出来的东西肯定不一样。

firstrose commented 2 years ago

搞不好就是同一个东西,最多那个PartnerTTDRecorder是针对sap软件做了特殊处理的。试试吧,反正你现在就有windbg。等你跟那两家扯完皮,拿到微软给的工具(如果拿得到的话),不知道要什么时候了。 @ztjal

LiMinggang commented 2 years ago

这东西理论上应该是你抓到这个回放后,给输入法的兄弟去找问题

ztjal commented 2 years ago

人家是把结果给巨硬的攻城狮看,我看不来。😂

LiMinggang commented 2 years ago

我猜调用栈跟MadEdit打印出来的一样,就是你前面附上的那个

ztjal commented 2 years ago

2022 08.22 冰凌输入法11.2.1.22080X(处暑版) 经测试,同样的操作,MadEdit不崩了。😃

LiMinggang commented 2 years ago

我现在还能遇到奇怪问题,有时候就不能输入中文了。切换一下窗口,甚至是MadEdit自己的窗口就好。感觉是丢失了一个刷新的事件。非常神奇。

ztjal commented 2 years ago

我现在还能遇到奇怪问题,有时候就不能输入中文了。切换一下窗口,甚至是MadEdit自己的窗口就好。感觉是丢失了一个刷新的事件。非常神奇。

这样试试,启动MADEDIT时会自己新建一个编辑文本框,在创建这个编辑文本框之前先给MADEDIT窗口来个SETFOCUS之类的定个焦点,创建这个编辑文本框之后再给个这编辑文本框来个SETFOCUS,仅限启动时这样手动定一下焦点。

LiMinggang commented 2 years ago

个编辑文本框,在创建这个编辑文本框之前先给MADEDIT窗口来个

目前还没有找到复现的规律,不然可以向你说的,打个类似的补丁

baoang commented 2 years ago

2022 08.22 冰凌输入法11.2.1.22080X(处暑版) 经测试,同样的操作,MadEdit不崩了。😃

官网查了下最新版,Win10系统上Chrome浏览器点击下载,竟然报毒。

ztjal commented 2 years ago

2022 08.22 冰凌输入法11.2.1.22080X(处暑版) 经测试,同样的操作,MadEdit不崩了。😃

官网查了下最新版,Win10系统上Chrome浏览器点击下载,竟然报毒。

别信浏览器的,设置里关掉。有需要的找“在线沙箱平台”。

firstrose commented 2 years ago

个编辑文本框,在创建这个编辑文本框之前先给MADEDIT窗口来个

目前还没有找到复现的规律,不然可以向你说的,打个类似的补丁

跟ME没关系。我也碰到的。但是发生的时候是在vs上面,而且根本就没开ME

LiMinggang commented 2 years ago

个编辑文本框,在创建这个编辑文本框之前先给MADEDIT窗口来个

目前还没有找到复现的规律,不然可以向你说的,打个类似的补丁

跟ME没关系。我也碰到的。但是发生的时候是在vs上面,而且根本就没开ME

是的,因为很少有应用程序需要跟输入法直接打交道,都是通过Windows/Linux这些OS去跟IME交互