トップページ > 記事閲覧
【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする
名前:was-blue.0793 日時: 2025/08/17 18:45

いつもお世話になっております。 表題の件につきまして、現在のバージョン(Ver3.24fと、テスト版のVer3.25)ではDXライブラリを使用するプログラムでlocaleが絡む処理を行うと、 Debugビルドのみntdll.dllの内部処理「VirtualProtect」関数でクラッシュするようです。 この問題は、例えば以下の機能に影響します: *setlocale、std::locale::globalの設定など *std::stringstreamの構築 WinMain関数の最初でsetlocaleを設定するようなことをしてもクラッシュするようです。 以下は簡易的な再現コードです: --- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ロケール設定 std::locale::global(std::locale::classic()); // stringstream の構築 std::stringstream str; // DXライブラリの初期化 if (DxLib_Init() < 0) return -1; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } --- この問題は2つのWindows環境で発生したことを確認しました。 DXライブラリを使用するプログラムでのみ発生するのでこちらへの書き込みとさせていただいております。 それではよろしくお願いします。
メンテ

Page: 1 |

Re: 【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする ( No.1 )
名前:みけにゃんこ 日時:2025/08/18 14:53

使用コンパイラー等が記載されていないのでよくわからないですが 社内の2台の開発環境でチェックしました バージョン(Ver3.24fと、テスト版のVer3.25)共に上記ソースでは不具合でません 何だろう? vs2022(v143) SDK バージョン  10.0 (最新のインストールされているバージョン) 文字セット:マルチ ランタイムライブラリ  release:マルチスレッド (/MT)  debug:マルチスレッド デバッグ (/MTd) C++言語(2種類テスト)  暫定(ISO C++14標準)  ISO C++20 標準 C言語  既定 (従来の MSVC) 追加のインクルードはDXライブラリーの手順 その他のパラメーターはさわっていません
メンテ
Re: 【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする ( No.2 )
名前:was-blue.0793 日時:2025/08/18 18:23

>> みけにゃんこさん 使用コンパイラーはMSVC・VS2022のVer17.14.12です。 Debugビルドのうち、ローカルWindowsデバッガーを使用した場合のみクラッシュします。「デバッグなしで開始」すると起動できるようです。 ビルド設定は以下の通りです: *SDKバージョン 10.0 (最新のインストールされているバージョン) *文字セット マルチバイト文字セットを使用する *ランタイムライブラリ Releaseは「マルチスレッド」Debugは「マルチスレッドデバッグ」 *C++言語標準 「ISO C++20 標準」または「プレビュー - ISO C++23 標準」 *C言語標準 「ISO C17 (2018) 標準」 その他はDXライブラリ説明書の記述通り
メンテ
Re: 【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする ( No.3 )
名前:みけにゃんこ 日時:2025/08/19 12:46

エラー確認 @.「ローカル windows デバッガー」を使用しないで   デバッグビルドしてその実行ファイルを直接実行してエラー発生しますか? A.もし、ゲームのアンチチート保護やセキュリティソフトウェアがバックグランドで動作しているなら停止してから   「ローカル windows デバッガー」実行してどうなるか?   まあ、アンチチート保護はゲーム起動して無ければ動作しないと思いますが、、 B.出来るだけクリーンなPCでデバッガー起動してどうなるか? --- @が動作するならクラッシュするそのPC環境かVisual Studio側の問題。 とりあえず、クラッシュする寸前をブレイクポイントを設定して 逆アセンブリウィンドウ等で頑張って追いかけるしか手段なさそうですが・・・ 後は、治るか判りませんが 1.ビデオドライバー最新版か確認、※DXライブラリーを使用時だけクラッシュするみたいなので 2.フルスクリーンで起動させないでウインドモードでデバッガー起動ではどうなるか 2.Visual Studio installer >その他>修復 3.Visual Studio再インストール 4.dism / sfc 等でOS確認 5.最悪はOS再インストール、、
メンテ
Re: 【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする ( No.4 )
名前:was-blue.0793 日時:2025/08/19 18:02

>> みけにゃんこさん ローカルWindowsデバッガーを使用せず、「デバッグなしで開始」とDebugビルドを直接起動するものではクラッシュしないようでした。 Releaseビルドでは「ローカルWindowsデバッガー」を使用してもクラッシュせず起動できます。 VS2022の修復は試したのですが改善されませんでした。
メンテ
Re: 【不具合?】Debugビルドのみ、localeが絡む処理を行うとクラッシュする ( No.5 )
名前:みけにゃんこ 日時:2025/08/19 20:53

ローカルWindowsデバッガー使用時にグローバルロケールとC言語ロケールの設定が食い違っている トラブルみたいな感じですね、、 std::locale::classic()は基本的なロケールを返すだけなのでエラー要因になりにくいのですが std::locale::global()が呼ばれるとCRT内部のファセット構造やメモリ保護ページにアクセスするので 環境やビルド設定によっては VirtualProtect が失敗し、ntdll.dll 内部で例外が発生します。 あと、下記だとローカルWindowsデバッガーでどうなります? int WINAPI WinMain(〜〜〜〜) { // ロケール設定 std::locale::global(std::locale::classic()); Sleep(2000); return(0); }
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存