如何获取触发内部编译器错误的预处理行?

How to get the preprocessed line which trigger an internal compiler error?

cl 选项

/nologo /ML /Gt0 /QMOb2000 /W3 /GX /Od /Gf /X /I "D:\Xorgfr\include" /D "NDEBUG" /D "NOGDICAPMASKS" /D "NOWINMESSAGES" /D "NOWINSTYLES" /D "NOSYSMETRICS" /D "NOMENUS" /D "NOICONS" /D "NOSYSCOMMANDS" /D "NORASTEROPS" /D "NOSHOWWINDOW" /D "OEMRESOURCE" /D "NOATOM" /D "NOCLIPBOARD" /D "NOCOLOR" /D "NOCTLMGR" /D "NODRAWTEXT" /D "NOGDI" /D "NOKERNEL" /D "NONLS" /D "NOMB" /D "NOMEMMGR" /D "NOMETAFILE" /D "NOMINMAX" /D "NOMSG" /D "NOOPENFILE" /D "NOSCROLL" /D "NOSERVICE" /D "NOSOUND" /D "NOTEXTMETRIC" /D "NOWINOFFSETS" /D "NOWH" /D "NOCOMM" /D "NOKANJI" /D "NOHELP" /D "NOPROFILER" /D "NODEFERWINDOWPOS" /D "NOMCX" /D "Roster" /D WIN32_WINNT=0x4000 /Fo"MIPSRel/" /c

实际上我正在构建一个内核 dll。

D:\Xfr\main.C() : fatal error C1001: INTERNAL COMPILER ERROR
  (compiler file 'mio.cpp', line 49)

mio.cpp文件在我的系统上不存在,所以我认为这是 cl.exe 源代码的一部分。使用 gcc,有一个选项可以让您知道哪一行代码触发了编译器错误。
我试图禁用已编译的 headers;所有优化都将目标更改为 R10000,但错误仍然附加在同一位置。

并且微软肯定不会更正错误。我找不到支持该平台的其他编译器。

此外,我确实需要使用包含文件,因为导出的是结构的结构。

static ALLOC_SECTION_LDATA KBDTABLES KbdTables = {
    &CharModifiers,

    aVkToWcharTable,

    aDeadKey,

    aKeyNames,
    aKeyNamesExt,
    aKeyNamesDead,

    ausVK,
    sizeof(ausVK) / sizeof(ausVK[0]),
    aE0VscToVk,
    aE1VscToVk,

    MAKELONG(KLLF_LRM_RLM | KLLF_ALTGR, KBD_VERSION),

    2,
    sizeof(aLigature[0]),
    (PLIGATURE1)aLigature
};

PKBDTABLES KbdLayerDescriptor(VOID) // this is the exported function, as you can see I definitely need it’s definition
    return  &KbdTables; // just return a pointer to the structure
}

刚找到答案。我认为 mio.cpp 可能意味着 mips io 并且它与写入文件有关。

就像在1801年之前设置时钟一样简单

不知道为什么,但这绝对是原因。做不恢复问题。
此外,BIOS 似乎无法很好地处理 post 2000 年。