1. 概述
相比各種打斷點調試的辦法,還是更習慣使用打印輸出來進行調試。
2. 詳論
2.1. 代碼
這裏寫了三個函數:分別是輸出到屏幕,輸出到警告日誌,輸出錯誤日誌。
Output.h:
#pragma once
namespace Output
{
void PrintScreen(const char* lpszFormat, ...);
void PrintLogWarning(const char* lpszFormat, ...);
void PrintLogError(const char* lpszFormat, ...);
};
Output.cpp:
#include "Output.h"
#include <Engine.h>
#include <Logging/LogMacros.h>
#include <array>
namespace Output
{
void PrintScreen(const char* lpszFormat, ...)
{
char szInfo[512];
va_list argList;
va_start(argList, lpszFormat);
vsnprintf(szInfo, 512, lpszFormat, argList);
va_end(argList);
//GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::Printf(TEXT("Print Message this is %f"), 2.3f));
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString(UTF8_TO_TCHAR(szInfo)));
}
void PrintLogWarning(const char* lpszFormat, ...)
{
char szInfo[512];
va_list argList;
va_start(argList, lpszFormat);
vsnprintf(szInfo, 512, lpszFormat, argList);
va_end(argList);
UE_LOG(LogTemp, Warning, TEXT("%s"), UTF8_TO_TCHAR(szInfo));
}
void PrintLogError(const char* lpszFormat, ...)
{
char szInfo[512];
va_list argList;
va_start(argList, lpszFormat);
vsnprintf(szInfo, 512, lpszFormat, argList);
va_end(argList);
GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString(UTF8_TO_TCHAR(szInfo)));
UE_LOG(LogTemp, Error, TEXT("%s"), UTF8_TO_TCHAR(szInfo));
}
};
2.2. 解析
-
打印輸出信息我認爲還是C語言的格式化輸出比較方便(類似
printf("個數:%d", num);
),使用格式化佔位符來拼接字符串。 -
UE的字符串類FString管理的是TCHAR字符串,TCHAR是char與wchar_t的封裝,在ANSI本地編碼中是char,在Unicode國際化編碼中是wchar_t。
-
UTF8_TO_TCHAR宏會將UTF8字符串轉換成TCHAR字符串。這段輸出打印代碼如果要輸出中文,需要把代碼文件的編碼更改爲UTF8編碼。
-
輸出日誌可以顯示在“輸出日誌”面板:窗口->開發者工具->輸出日誌。