Help us understand the problem. What is going on with this article?

UE4で開発者毎に固有のマクロ定義を宣言する(俺マクロ)

More than 1 year has passed since last update.

俺マクロ

UE4ってDevelopビルドで開発中もユーザーコードが最適化されているので
いざデバッガが使いたいような問題にあたったり例外が出た時に変数などが省略されてて
困ることがありますよね。
※ディスアセンブルを読めば良いんですが、苦手な人もいますよね。
そこで自分がデバッグしたいコードの一部分の最適化を#pragma optimizeを使って解除しておくとデバッグが簡単になります。

ただしチーム開発している時に他の開発者に影響を与えるのは困りものですし
CIで生成したパッケージに影響を与えるのはもっと困ります。
そこで開発者毎のマクロを宣言して使うようにすると自分だけに影響を及ぼすコードを記述できます。

UEはUBTというビルドツールがビルド全般を担うのでBuild.csファイルにちょっと追記することで実現可能です。

Build.CS

Mygame.Build.cs
public class MyGame : ModuleRules
{
    public MyGame(ReadOnlyTargetRules Target) : base(Target)
    {
        string DevUserDefine = "DEVUSER_" + System.Environment.GetEnvironmentVariable("USERNAME").ToUpper();
        DevUserDefine = DevUserDefine.Replace(".", "_");
        DevUserDefine = DevUserDefine.Replace("-", "_");
        DevUserDefine = DevUserDefine.Replace("$", "_");
        PublicDefinitions.Add( DevUserDefine );

使ってみる

optimize/off したあとは、後方で optimize/onしておくのがよろしいです。
(unitybuildとかで他のソースに影響を与えたりしちゃうかも)

MyClass.cpp
#if defined(DEVUSER_TAKASHI_SUZUKI)
#pragma optimize("",off)
#endif //DEVUSER_TAKASHI_SUZUKI

void MyClass::MyFunction()
{
... // debuggable!!
}

#if defined(DEVUSER_TAKASHI_SUZUKI)
#pragma optimize("",on)
#endif //DEVUSER_TAKASHI_SUZUKI

iniに書けばいいじゃん・・・と思うかもしれませんがConsoleVariableに適用するのも楽ちんなので結構好きです。

MyClass.cpp
static TAutoConsoleVariable<int32> CVarMyVariable(
    TEXT("MyGame.MyVariable"),
#if defined(DEVUSER_TAKASHI_SUZUKI)
    1,
#else
    0,
#endif //defined(DEVUSER_TAKASHI_SUZUKI)
    TEXT("0 - anta")
    TEXT("1 - wai"));

以上!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away