Godot 4 源码分析 - 日志输出

文章讲述了如何在Godot引擎中定制日志输出,特别是在无控制台模式下。通过修改WindowsTerminalLogger的logv和log_error函数,添加DrGraph前缀以便追踪调试。同时,为了在非控制台模式下记录日志,文章实现了使用ofstream创建日志文件的功能,生成名为DrGraph_debug.log的文件来保存运行信息。此外,还介绍了DEBUG_SOURCE_POS宏定义,用于打印源代码位置信息。

使用软件,日志可以提供比较多的运行信息,研究日志也是一种学习。

Godot有两种运行模式:带控制台与不带控制台。带控制台的情况下,运行时会打开一个DOS窗口,具体的日志信息就显示在DOS窗口中。但不带控制台,就我目前的了解,这些日志就不知道在哪里显示了。

DrGraph前缀输出

基于单步调试,发现各种日志输出将调用CompositeLogger的各个loggers的logv、log_error函数,而在windows下运行,会有WindowsTerminalLogger实例对象,最终会调用WindowsTerminalLogger::logv/log_error函数。为了看看是否有效果,我在WindowsTerminalLogger::logv中输出的地方,加上DrGraph前缀输出。


void WindowsTerminalLogger::logv(const char *p_format, va_list p_list, bool p_err) {
	if (!should_log(p_err)) {
		return;
	}

	const unsigned int BUFFER_SIZE = 16384;
	char buf[BUFFER_SIZE + 1]; // +1 for the terminating character
	int len = vsnprintf(buf, BUFFER_SIZE, p_format, p_list);
	if (len <= 0) {
		return;
	}
	if ((unsigned int)len >= BUFFER_SIZE) {
		len = BUFFER_SIZE; // Output is too big, will be truncated
	}
	buf[len] = 0;

	int wlen = MultiByteToWideChar(CP_UTF8, 0, buf, len, nullptr, 0);
	if (wlen < 0) {
		return;
	}

	wchar_t *wbuf = (wchar_t *)memalloc((
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值