ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

UE4 & iOS開発時の実機デバッグ・プロファイリング方法 まとめ 2018 < CPU・GPUデバッグ編 >

本内容は複数の記事で構成されています。検索などでこの記事に直接飛んできた方はまず以下の記事をご確認ください。
pafuhana1213.hatenablog.com

はじめに

ゲームの動作や不具合を調査・デバッグする上でBreakPointは必要不可欠です。ということで、UE4 & iOS開発時にどのようにしてBreakPointを使うのかについて紹介します。なお、Xcodeを使用する関係でMacが必須なのでご注意ください ( MacMiniはいいぞ )。
f:id:pafuhana1213:20181213024154g:plain

Mac上で開発する場合

リモートビルドは使わずにMac上で開発を進めている場合は、ゲームコード・エンジンコード共に簡単にデバッグ可能です。ただ、Xcodeと実機上で動作するアプリを接続する必要はあります。

接続する方法は2通りあります。まず1つ目は、前回の記事で紹介したXcodeからアプリを起動する方法」です。この方法ならXcodeとアプリが接続した状態で起動するため、BreakPointがすぐ使えます。
なお、エンジンコードにBreakPointを貼りたい場合は、ランチャー版ではなくビルド版を使用する必要があります。ご注意くださいまし。

もう一つ目の方法は、「既に起動しているアプリのプロセスにアタッチする方法」です。XcodeDebug->Attach to Process からアタッチするとBreakPointが有効になります。ただし、前回の記事で軽く触れたとおり、この方法の場合はXcodeのConsole Areaにログが出力されない点にご注意ください。
f:id:pafuhana1213:20181213024418p:plain

リモートビルドを使う場合

Windowsからのリモートビルドの場合でも、Mac上でゲームコードのデバッグは可能です。

リモートビルド中、UE4プロジェクトとエンジンの各ファイル(全ファイルではない)がMacの以下の場所に転送されます。
Macintosh HD\ユーザ\[User Name]\UE4\Builds\[Windows PC Name]”

例えば Windowsの“D\UnrealProjects\SampleProject”にあるプロジェクトでリモートビルドした場合、Mac
Macintosh HD\ユーザ\[User Name]\UE4\Builds\[Windows PC Name]\D\UnrealProjects\SampleProject” にプロジェクトの各ファイルが配置されます。
f:id:pafuhana1213:20181213024701p:plain

そして、その階層にある “Indermediate\ProfjectFilesIOS” 以下に Xcodeのプロジェクトファイル( .xcodeproj )が配置されています。このプロジェクトファイルを使うことで、上述の「既に起動しているアプリのプロセスにアタッチする方法」が可能です。

しかし、リモートビルドの場合は「Xcodeからアプリを起動する方法」とエンジンコードのデバッグは(おそらく)現状できません…。今後にご期待ください…。

追記(CPUデバッグ)

XcodeでFStringまたはFNameの値を監視する方法

UE4/Engine/Extras/LLDBDataFormatters/UE4DataFormatters.py を Mac上に配置してから、  
command script import "UE4/Engine/Extras/LLDBDataFormatters/UE4DataFormatters.py"

参考:How to watch the value of FString or FName in xcode? - Unreal Engine Forums

BreakPointが正常に動作しない場合

% echo "settings set target.inline-breakpoint-strategy always" >> ~/.lldbinit で解決する可能性あり

参考:LLDB FAQ

GPUデバッグ

いわゆるGPUフレームキャプチャ機能について。
描画に関する負荷・不具合をより細かく調査する必要が出てくる場合があります。例えば「どのような処理が」「どのような順番で」「どのようなアセットを使って」「どのぐらいの処理負荷で」…などといった感じです。
コンソール専用ツールを除けば、UE4開発者内ではRenderDocが有名所かなと思います。
qiita.com

そして、そのGPUフレームキャプチャ機能がXcodeに用意されています。こんな感じ。
f:id:pafuhana1213:20181213024930p:plain
f:id:pafuhana1213:20181213024946p:plain

GPUフレームキャプチャ機能の使い方

といっても簡単です!

Xcodeからアプリを起動する方法」の実行すると、XcodeのDebugメニューからGPUフレームキャプチャに関する項目(Capture GPU Frameなど)が使用可能になります。そして、それを選択するだけでGPUフレームキャプチャを実行することができます。超簡単!
f:id:pafuhana1213:20181213025034p:plain

…言い換えると、「既に起動しているアプリのプロセスにアタッチする方法」の場合はGPUフレームキャプチャは使えません。さらに言うと、リモートビルドの場合はGPUフレームキャプチャは完全使用不可です。

Mac Miniはいいぞ!

XcodeGPUフレームキャプチャ機能は結構いい感じな印象です。例えば、負荷が目立つ処理にはひと目で分かるようにビックリマークがついていたり…
f:id:pafuhana1213:20181213025106p:plain

GPUフレームキャプチャに期待する情報をちゃんと出してくれますし…
f:id:pafuhana1213:20181213025137p:plain
f:id:pafuhana1213:20181213025150p:plain

この辺りはやはりMetalの恩恵が大きいのかなという所です。

個人的参考まとめ(GPUデバッグ)

qiita.com
booth.pm

最後に

ここまでがCPU,GPUデバッグに関してでした。これらの情報を知ってるか知らないかで制作効率が大きく変わってくると思います。ぜひ一度実際に手を動かして試してみましょう!
あと、Xcodeはまだまだ勉強中なので今後もっと情報を出していければと思います…!

次は、みんな大好きプロファイリングについて。プロファイリングツールであるInstrumentsに触れてます。
pafuhana1213.hatenablog.com