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);
}
|