我一直在使用 Windows API 中的 FormatMessage 函数从系统错误代码生成消息字符串。我注意到对于某些错误代码,似乎没有创建完整的消息。
以这个示例程序为例:
int main()
{
wchar_t * buffer = nullptr;
FormatMessageW(
FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_IGNORE_INSERTS,
nullptr,
ERROR_SYSTEM_PROCESS_TERMINATED,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
reinterpret_cast<LPWSTR>(&buffer),
0,
nullptr);
std::wcout << buffer << std::endl;
return 0;
}
根据MSDN,我应该看到以下内容:
{致命系统错误}
%hs 系统进程意外终止,状态为 0x%08x (0x%08x 0x%08x)。系统已关闭。
但是,在示例程序中,我将看到:
{Fatal System Error}
%hs 系统进程意外终止,状态为 0x
我注意到这ERROR_UNHANDLED_EXCEPTION
也不会创建完整的消息(与 MSDN 上的列表相比)。两条预期消息都包含0x%08占位符,但消息在0x之后结束。
据我所见,其他错误消息似乎与 MSDN 上的列表相匹配(即问题似乎仅限于ERROR_UNHANDLED_EXCEPTION
and ERROR_SYSTEM_PROCESS_TERMINATED
)。
归功于 engf-010 - 如果您使用 Visual Studio 中的错误查找工具(工具 - 错误查找),您会得到相同的结果。错误代码为 574 和 591。
有谁知道为什么这些消息被裁剪?
反正有没有得到完整的信息?