feat: 实现日志与调试系统(Debug模块)

- LogLevel: 日志级别枚举 (Verbose, Debug, Info, Warning, Error, Fatal)
- LogCategory: 日志分类 (General, Rendering, Physics, Memory, Threading等)
- ILogSink: 日志输出接口
- ConsoleLogSink: 控制台输出, 支持Windows颜色
- FileLogSink: 文件日志输出
- FileWriter: 文件写入器
- Logger: 日志管理器, 支持多sink, 分类控制
- Profiler: 性能分析器
- 单元测试覆盖
This commit is contained in:
2026-03-13 20:53:57 +08:00
parent dc9b0751cb
commit 83fd517974
22 changed files with 780 additions and 0 deletions

View File

@@ -42,6 +42,7 @@ add_subdirectory(core)
add_subdirectory(containers)
add_subdirectory(memory)
add_subdirectory(threading)
add_subdirectory(debug)
# ============================================================
# Test Summary

View File

@@ -0,0 +1,14 @@
add_executable(xcengine_debug_tests
test_logger.cpp
test_profiler.cpp
)
target_link_libraries(xcengine_debug_tests
PRIVATE
XCEngine
gtest
gtest_main
)
include(GoogleTest)
gtest_discover_tests(xcengine_debug_tests)

View File

@@ -0,0 +1,48 @@
#include <gtest/gtest.h>
#include <XCEngine/Debug/Logger.h>
#include <XCEngine/Debug/ConsoleLogSink.h>
using namespace XCEngine::Debug;
namespace {
TEST(Debug_Logger, LogLevel) {
EXPECT_STREQ(LogLevelToString(LogLevel::Verbose), "VERBOSE");
EXPECT_STREQ(LogLevelToString(LogLevel::Debug), "DEBUG");
EXPECT_STREQ(LogLevelToString(LogLevel::Info), "INFO");
EXPECT_STREQ(LogLevelToString(LogLevel::Warning), "WARNING");
EXPECT_STREQ(LogLevelToString(LogLevel::Error), "ERROR");
EXPECT_STREQ(LogLevelToString(LogLevel::Fatal), "FATAL");
}
TEST(Debug_Logger, LogCategory) {
EXPECT_STREQ(LogCategoryToString(LogCategory::General), "General");
EXPECT_STREQ(LogCategoryToString(LogCategory::Rendering), "Rendering");
EXPECT_STREQ(LogCategoryToString(LogCategory::Memory), "Memory");
EXPECT_STREQ(LogCategoryToString(LogCategory::Threading), "Threading");
}
TEST(Debug_Logger, Initialize) {
Logger& logger = Logger::Get();
logger.Initialize();
EXPECT_TRUE(true);
logger.Shutdown();
}
TEST(Debug_Logger, SetMinimumLevel) {
Logger& logger = Logger::Get();
logger.Initialize();
logger.SetMinimumLevel(LogLevel::Warning);
EXPECT_TRUE(true);
logger.Shutdown();
}
TEST(Debug_Logger, SetCategoryEnabled) {
Logger& logger = Logger::Get();
logger.Initialize();
logger.SetCategoryEnabled(LogCategory::Rendering, false);
EXPECT_TRUE(true);
logger.Shutdown();
}
} // namespace

View File

@@ -0,0 +1,37 @@
#include <gtest/gtest.h>
#include <XCEngine/Debug/Profiler.h>
using namespace XCEngine::Debug;
namespace {
TEST(Debug_Profiler, Initialize) {
Profiler& profiler = Profiler::Get();
profiler.Initialize();
EXPECT_TRUE(true);
profiler.Shutdown();
}
TEST(Debug_Profiler, BeginEndProfile) {
Profiler& profiler = Profiler::Get();
profiler.Initialize();
profiler.BeginProfile("TestProfile");
profiler.EndProfile();
EXPECT_TRUE(true);
profiler.Shutdown();
}
TEST(Debug_Profiler, Frame) {
Profiler& profiler = Profiler::Get();
profiler.Initialize();
profiler.BeginFrame();
profiler.EndFrame();
EXPECT_TRUE(true);
profiler.Shutdown();
}
} // namespace