-
Notifications
You must be signed in to change notification settings - Fork 89
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在 build_type 为 debug 的情况下,Windows 下编译出来的 dll 遇到中文会崩溃 #158
Comments
你可以提个 PR 做这个改动,我理解影响不大 |
@SageMik 或者在函数进来之后先根据这个文档说的,cast 成 unsigned char |
这样下面的 isspace 那些函数也都安全了 |
感谢 |
不行,有bug,虽然我不懂C++,但是我今天把大佬你的项目fork了一份,然后把
作为对比:
|
|
@xMuscleCodingx 我把 pinyin.txt 换成了 zdic.txt,Window 和 Mac mini M4 上通过 CMake 命令行编译,在我自己的 Flutter 示例上没有复现这个问题,可能需要你提供更多的信息,比如 fork 之后具体修改了什么,有没有出错示例和出错截图。 |
@wangfenjin @SageMik 打扰两位了 这是昨天使用zdic并去掉unsigned版本,这是今天使用原始pinyin.txt并加上unsigned的版本
我改动的地方: 1、CMakeLists.txt
2、workflows的main.yml,就是区分了架构进行打包,根据这里,
|
很奇怪,zdic并去掉unsigned版本,在m1 pro macbook上没问题,但我刚刚在x64 windows上尝试一下,居然用不了,报错如下: 使用原始pinyin.txt并加上unsigned的版本,在m1 pro macbook上使用异常,但是在x64 windows上,又能正常使用 |
@SageMik 你说的常用读音的文件具体是哪个?可以提个 MR 把那个改了 |
@SageMik @xMuscleCodingx 我本地试了下,确实加 unsigned 会有问题;我猜想原因是如果是 unicode ,转成 unsigned 之后会造成误判。 需要有个提交修复这个问题,大家可以想想看怎么弄 |
我试了下,zdic.txt 去掉 unsigned 在 Mac 上没问题,在 Windows 上也是崩溃,跟 @xMuscleCodingx 描述的一样;但 pinyin.txt 加上 unsigned ,我在 Mac M4 和 Windows 上能正常使用,不能复现这个问题,真是挺奇怪的。 这样子有好几种情况:
如此无论去不去掉 unsigned 都有问题,感觉需要调试代码看看定位原因,不然可能还不好修复。我对 C++ 其实也不算熟悉,估计要靠 @wangfenjin 大佬看一看了。 至于拼音文件我其实没有具体试过其他的,只是觉得目前这个确实太全了。 |
拼音的话看起来 kTGHZ2013.txt 是一个不错的候选 先放着吧,如果还有人反馈的话可以考虑把pinyin.txt 换个简单版,我之前没有多想这个问题 |
@xMuscleCodingx 感谢反馈 |
真不会C++,这个现象也着实是太神奇了,还是得辛苦 @wangfenjin 大佬处理一下了,感谢大佬开源这个项目。 |
@xMuscleCodingx 这个我感觉不是代码的问题,应该是你本地的 sqlite 版本问题 |
现在的情况我认为是,如果不用 unsigned 会导致 debug 版本 crash,这个可能是故意设计的,在 debug 阶段暴露更多问题 |
@wangfenjin 大概不是,因为这个我和 @xMuscleCodingx 的现象是一样的。 如果我用本地的 CMake 编译,无论是 unsinged char 还是 char ,在 Windows 上都没问题。 去掉 zdic.txt 里面的注释,用 Github Action 编译,无论是 unsinged char 还是 char,在 Windows 上也没有这个问题了。 看上去是注释里的偏僻字和不同的编译选项会对 simple 的解析造成影响。 可以用这里 zdic.txt 的各个版本试试:https://github.com/SageMik/simple/releases @xMuscleCodingx 或许可以试试上面的 v4 (删除注释的 zdic.txt + unsigned char) 的 |
https://github.com/wangfenjin/simple/blob/master/contrib/README.md 拼音文件确实需要处理下,处理下的好处是编译出来的东西也会变小一点;可以用我这个 readme 文件里的命令处理 |
这个是我在electron中用better-sqlite3往fts表中插入数据时报的错 |
感谢!我刚在x64 windows上试了 v4 (删除注释的 zdic.txt + unsigned char) ,这个是正常的(还没有在m1 pro mac尝试)。 |
@SageMik windows上可以,m1 pro mac上还是乱码 |
不用试 unsigned 那个改动了,肯定有问题的;试试 #162 zdic 需要处理下 |
Bug 描述
我参考仓库里的 Github Actions,设置
cmakeBuildType: Debug
编译了 Debug 版本的 simple.dll,遇到了与 #104 相同的问题,只要有中文就会报错(Release 版本没有这个问题):根据这篇文章的说法:https://blog.csdn.net/chinaryan/article/details/91839813,是因为下面这个地方使用了
isdigit
这类函数,它们的底层实现用到了报错截图中的cpp文件;当遇到中文时,传入的字符有负数,因而导致断言失败:simple/src/simple_tokenizer.cc
Lines 24 to 35 in 33d1ea7
而 Release 版本没有这个问题,是因为断言被优化掉了。
我把参数的类型修改为
unsigned char
后,就能正常在 Window 下运行:同时,在 Windows 下使用 Visual Studio 2022 编写如下用例,也会出现相同的报错:
上面这两种现象,大概率可以验证我前文的说法。不过我只在 Windows 下测试了一下这个修改方案,不知道会不会有其他影响。
希望大佬能排查验证,修复一下这个bug。
重现步骤
环境信息
The text was updated successfully, but these errors were encountered: