Windows 11 22H2、Delphi/C++Builder製アプリが日本語変換時にクラッシュ 73
ストーリー by nagazou
IME関係のトラブル多いなあ 部門より
IME関係のトラブル多いなあ 部門より
Windows 11の最新バージョン「22H2」では、日本語入力システム(IME)にいくつかの機能変更が加えられているが、その影響により複数のトラブルが発生しているようだ。窓の杜の記事によれば、「Delphi」「C++Builder」「RAD Studio」で作成されたアプリケーションでクラッシュする症状が報告されているという(窓の杜)。
窓の杜の記事によれば、2002年リリースの「Delphi 7」から最新の「RAD Studio 11.2 Alexandria」までの、幅広いバージョンに影響するという。この問題により、テキストエディター「TeraPad」や「Mery」、クリップボード履歴ツール「Clibor」に影響が出ているとしている。当面の対策としては旧バージョンの「Microsoft IME」に戻すか、[オプションの診断データを送信する]オプションを無効化する方法をEmbarcadero Technologiesは案内しているとのこと(Embarcadero Technologies)。
窓の杜の記事によれば、2002年リリースの「Delphi 7」から最新の「RAD Studio 11.2 Alexandria」までの、幅広いバージョンに影響するという。この問題により、テキストエディター「TeraPad」や「Mery」、クリップボード履歴ツール「Clibor」に影響が出ているとしている。当面の対策としては旧バージョンの「Microsoft IME」に戻すか、[オプションの診断データを送信する]オプションを無効化する方法をEmbarcadero Technologiesは案内しているとのこと(Embarcadero Technologies)。
問題の核心は診断データの生成かも (スコア:3, 参考になる)
今回の不具合はこんなプロセスみたい。
1) 新しいIMEでON/OFF時に浮動小数点例外が発生する
診断データの送信をONにすると発生するので、診断データの生成時に何らかの計算をして発生してる?
2) IME側で浮動小数点例外処理を行ってないので呼び出してるアプリで浮動小数点例外が発生する
3) Delphi/C++Builder は浮動小数点例外がデフォルトで有効になってる
VC++は浮動小数点例外がデフォルトで無効になってる
4) 想定外(UI)のところで浮動小数点例外が発生するのでアプリが落ちる
Delphi/C++Builderのアプリは(使ってないなら)浮動小数点例外を無効にすれば大丈夫。
使用するVCLによっては勝手に浮動小数点例外を無効にするので不具合が発生しない。
(↓をしないと浮動小数点例外処理が動かなくなるという副作用がある)
使ってる場合は計算で発生する部分だけピンポイントで浮動小数点例外を有効にするとかしないといけない。
Re:問題の核心は診断データの生成かも (スコア:1)
// 言っとけ
Re: (スコア:0)
知る必要もないのに浮動小数点例外を有効にするやつがいることにちょっとびっくり。(Delphi/C++Builderが悪い)
浮動小数点例外っていっても、IEEE754のやつだったら要因はいろいろあるけど、Invalid Operationが起きてるのか?
ふつうNaNを伝搬させるからいいだろとか思ってるとこうなるわけかな?
しかし3)のDelphi/C++Builderは浮動小数点例外がデフォルトで有効っていっても、InexactだのUnderflowだのはOFFになってるよね? めんどくさすぎだろ。
Re: (スコア:0)
浮動小数点例外といえばPC-9801シリーズ用Windows95
トラップ部分にバグがあり、たとえば -1の平方根を取るとブルースクリーン(PC-9801用はハードウェアの仕様の都合で青くないのだが)になる。
Windows98では浮動小数点例外のダイアログボックスが出るだけで落ちなくなった。
IEEE Double (スコア:0)
IEEE Doubleのデフォルトに合わせてプログラム側でチェックさせたほうがいいと思う。
# rustはそうなってる
Re: (スコア:0)
スラド民は、インストールしてすぐに、プライバシー重視側設定にして、
診断データとか取得しない・送らない設定にしてそう
多くの大企業も、プライバシー重視設定にしてるはず
あたらしいな (スコア:2)
コンパイラ依存で排除できるようOSを改変したとは思いたくないが
Microsoft Visual StudioとVisual Studio Codeの世界にようこそ
Re: (スコア:0)
vclだったかなんだか使用ライブラリと11がカチ合ってるみたいっすよ
Re: (スコア:0)
VCLはちょくちょくなにかとぶつかる記憶あるなぁ…
Re: (スコア:0)
Embarcadero RAD Studio 英語のWikipedia に項目作られてない。
日本語版で動作確認はWindows10になっているし。
悲しいな。
客でも何でもないけど。
Re: (スコア:0)
浮動小数点例外を利用しているアプリは駄目らしいよ。
Re:あたらしいな (スコア:5, 参考になる)
VC++でも浮動小数点例外を利用していると落ちるという……
こんな低次元で再現率100%の不具合とか
ちゃんとテストしてるのか?とか言いたくなる。
Re:あたらしいな (スコア:1)
ちゃんとテストしてるのか?とか言いたくなる。
テストした結果不具合が発覚したのですよ
# 本リリース=テストみたいな
Re:あたらしいな (スコア:1)
> (ユニットテストのケース漏れをいくつか報告したら自分のミスにされかけた)
だから誰もバグを報告しなくなるわけですよ。あとバグの数が目標数より少なすぎてもいけない、みたいな現場用に調整用のバグをいくつか用意しておくとか
Microsoft IME いるか? (スコア:2)
最初からGoogle日本語入力かATOK買収していれとけば。
最近トラブルばっかりだね > MS IME
Re: (スコア:0)
選択肢が減るだけだからそういう発想マジ害悪。
それらを使ってる人は現状でも何も困ってないし。
Re: (スコア:0)
少し前にはATOKもテキスト入力フレームワーク周りで不具合起こしていたはず。
Re:Microsoft IME いるか? (スコア:1)
しばらく前から FireFox + ATOK の組み合わせで使っていると
なにかの拍子にリモートプロシージャコールが暴走して
OS巻き込んで固まるという現象があるけど
対象者が少なすぎてさほど問題になってないという。
#FireFoxに accessibility.force_disabled = 1 の呪文を唱えると幸せになれるらしい
Re: (スコア:0)
IMEはマジに国費を入れてもまともなのが選べるようにしないとやばいと思う。
Re: (スコア:0)
もうかなり変わってるだろうけど、今のMS IMEのベースはエー・アイ・ソフトのWX3ですよ。元にしたのが何だろうが、そこから何十年もかけていろいろ手を加えていったら同じような結果になる。
Re: (スコア:0)
WX2ですね。DOS版MS-IMEの頃は辞書をダンプするとWX2の文字が残ってました。
Re: (スコア:0)
なんかWin95の時点でWX3ベースに切り替えたらしいです。ダンプは取ってないので未確認だけど。
Re: (スコア:0)
辞書のフォーマットが同じなのか、辞書データがインポート・エクスポートすることなく流用できた、と聞きます。
Re: (スコア:0)
MS IMEは今はもうWXシリーズとは無関係なものになってそうな気がする
まともに文節変換出来ないし
Re: (スコア:0)
WX-Gってあったけどいつの間にか消失
(*´ω`*)
Re: (スコア:0)
MS IMEはそんなダメじゃ無くね?
標準だからずっと使ってるけど、そんな大きな問題を感じたことはないよ。
一方でiOSのIME、お前はダメだ。
何度直しても変なところで区切ったりカタカナになったりするし、お前は何とかせえよ。
Re: (スコア:0)
MS IMEは旧バージョンは良いんだよ
新バージョンが相当挙動変えてしまっていて
今回のような問題を起こしてる
新バージョンが導入されて2年ぐらい経ってる筈なんだけど
未だに改善しきれてない
苦肉の策で旧バージョンに戻す設定項目追加して
対応終わりという感じになってる
Re: (スコア:0)
え? MS-IMEは昔からひどいでしょ。
すみません。新しいバージョンを使ったら、たしかにもっとひどくなってました。
って、15年くらい前にも言ったことがある。
2年前のもたしかにそうだし、旧バージョンに戻す機能があって助かった。
Re: (スコア:0)
ATOKはともかくGoogle IMEはMS IMEより後じゃん。
Re: (スコア:0)
Google日本語入力もパフォーマンスダウンの挙動に遭遇したことあるし、ATOKなんてOSバージョンアップのたびにパッチが必要なほど不具合連発してるんだが。
余計な事をしたんだろうな (スコア:1)
「オプションの診断データを送信する」をオフにすれば収まるって事はユーザの行動情報収集用の処理でホストアプリを巻き込んで落ちてる訳か。
余計なことの為になんてことを。
Re:余計な事をしたんだろうな (スコア:1)
Embarcadero Technologiesの説明見た感じ、Windowsのコンポーネントが想定外の挙動してVCLのコンポーネントが処理できず例外吐いて
そんなの想定してないアプリがcatchしてなくて死ぬみたいな流れかなあ。
Re: (スコア:0)
ライブラリが元々投げることになっている例外はすべて掴むべき。絵投げてきた理由が間違ってる?知らん。
Re: (スコア:0)
OSのAPIが例外を投げているのだし発生するタイミングもプログラム対象外じゃない?
Re: (スコア:0)
例外投げてるのはOSではなくVCL。その理由がOS側APIの挙動が変わったせい。APIの挙動がVCL側が想定していないものだったようなので「ライブラリが元々投げることになっている例外すべて掴む」で対処可能かどうかは疑わしい。
Re: (スコア:0)
Win32 APIはそう簡単に例外投げない。出るのはNULLとHRESULTと不具合。
Re: (スコア:0)
C言語(C++ではない)向けのインターフェースなんだから例外を投げるわけがない。
Re: (スコア:1)
WindowsはOSレベルで構造化例外処理 [microsoft.com]をサポートしてる
エラーの時に例外を投げるよう指示できるAPIもある
例
メモリ割り当て方法の比較 [microsoft.com]
GlobalAlloc、LocalAlloc、HeapAlloc 関数は最終的に同じヒープからメモリを割り当てますが、それぞれ少し異なる機能セットを提供します。 たとえば、メモリを割り当てられなかった場合に例外を発生するように HeapAlloc に指示できます。
Re: (スコア:0)
というか例外の実装って処理系によってけっこう違うから、OSをどのような言語で書こうがプロセス側で例外を受け取るのは難しい。JavaVMや.NETランタイム内とかだと例外の実装も決められてるので言語をまたいで扱えるけどね。
Re: (スコア:0)
ほんそれ。
ワクチンの副作用で死ぬ、みたいな。
いや、検診で病気になる、か。
でも悪いことにこっちは再現率は100%
Devチャネルでは修正済みだそうです (スコア:1)
https://qiita.com/ht_deko/items/d572f0b965e21c8125f4#-microsoft-%E3%81... [qiita.com]
そのうち22H2にもバックポートされるかな
Re: (スコア:0)
Dev チャネルは別系統だから。すぐには直らないでしょ
標準コントロールの背景が消されていないバグも、Dev チャネルで修整されてからリリース版に落ちてくるまで半年以上かかったしな。
Re:Devチャネルでは修正済みだそうです (スコア:1)
Releasing Windows 11 Build 22000.1163 to the Release Preview Channel [windows.com]
We fixed an issue that affects input method editors (IME) from Microsoft and third parties. They stop working when you close the IME window. This occurs if the IME uses Windows Text Services Framework (TSF) 1.0.
もしかしてK2Editorも (スコア:0)
Delphi で作っていたような気がする
あふw (スコア:0)
2面ファイラーのあふwもDelphiだったような。
だから (スコア:0)
WXにしておけと...
Re: (スコア:0)
まだあるの?
# Wnn(の流れのもの)はまだある らしい
Microsoftはevilだった (スコア:0)
ときメモのために互換性を維持するなんてevilな所業を行っていた
Microsoftはもういないんだな
新しいバージョンが駄目 (スコア:0)
Edge上で日本語入力してる時にも時々クラッシュしますよね。
クラッシュするのはIMEの方で別ウインドウに切り替えて戻れば再起動するので大分マシですけども。
フリーの老舗テキストエディター「TeraPad」が10年ぶりのアップデート (スコア:0)
なんで今頃アップデートされたのかと思ったらこの対策だったのか。
https://forest.watch.impress.co.jp/docs/news/1447895.html [impress.co.jp]