いつもお世話になっております。
EGSやSteamなどで既に配信しているゲームタイトルに関しまして、ユーザー環境にてクラッシュした際、
パッケージを作成した環境のファイルのフルパスが表示されてしまいます。
配信しているパッケージには、デバッグ情報を付与しないように設定していますが、
以下のようにVerbosityをFatalに設定したUE_LOGで表示されてしまうようです。
UE_LOG(LogTemp, Fatal, TEXT("hoge") );
こちら、エンジン側のソースコードでも同様の事が起きているため、VerbosityがFatalでクラッシュした際に
ファイルのフルパスが表示されないように対応したいと思っております。
現状ですと、
UE5\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp
のStaticFailDebugV関数を編集しておりますが、
何か正式な対応方法などございますでしょうか?
ご確認のほどよろしくお願いします。
お世話になっております。
StaticFailDebugV関数を直接改変するほかには、グローバル定義の「UE_LOG_INCLUDE_SOURCE_LOCATION」を0に変更するという方法があります。
この定義を0に変更しますと、FILEやLINEが空文字になり、ログにもファイルパスの代わりに “Unknown” などの文字列を埋め込むようになります。
ご要件を満たせるか一度ご確認いただけますと幸いです。
以上、よろしくお願いいたします。
ご返答ありがとうございます。
Target.csにて
GlobalDefinitions.Add("UE_LOG_INCLUDE_SOURCE_LOCATION=0");により、UE_LOG_INCLUDE_SOURCE_LOCATIONを0にしたところ、
Developmentなどログを出力するConfigurationではクラッシュが発生します。
クラッシュ内容を見たところ、ログ出力用の構造体(FStaticBasicLogRecord)にてファイルパスを保存しているメンバ変数(File)がNullptrのままになっている事により、クラッシュしていました。
UE_LOG_INCLUDE_SOURCE_LOCATIONが無効だった場合のソースコードの保守がされていないようです。
初期値をNullptrではなく、Unknownにしたところ、無事解決しました。
しかし、ログを出力しないShippingでパッケージを作成したところ、
今回ご相談させて頂いたUE_LOGのFatalによるファイルパスの出力は変わらず出力されていました。
ひとまずご報告させて頂きます。
今回は、StaticFailDebugV関数の変更のみで対応したいと思います。
ご確認ありがとうございました。
お世話になっております。
ご確認ありがとうございます。
UE_LOG_INCLUDE_SOURCE_LOCATION=0がノーメンテナンスであったこと、またSHIPPINGでは動作が変わらなかったとのこと、大変失礼いたしました!
余計なお手間をとらせてしまい、申し訳ありません。
当方でも、UE_LOG_INCLUDE_SOURCE_LOCATION=0はご指摘のとおり問題があり、また SHIPPING ビルド時はこの定義を0に変更しても動作に影響を与えない実装になっていることを確認いたしました。そのため、元のご質問の件の対応するためには、現状StaticFailDebugV関数など、エンジンにに手を入れていただくしか方法がなさそうです。
また、UE_LOG_INCLUDE_SOURCE_LOCATION=0でクラッシュを引き起こしてしまう件については、のちほど社内のバグトラッカーに起票しておきます。
ほかにご不明点などなければ、本件は対応済みとしてCloseさせていただこうと思います。
以上、よろしくお願いいたします。