经过多年使用丑陋的大 MFC ASSERT 宏,我终于决定放弃它并创建终极 ASSERT 宏。
我可以获取文件和行号,甚至是失败的表达式。我可以显示一个带有这些的消息框,以及中止/重试/取消按钮。
当我按下 Retry 时,VS 调试器会跳转到包含 ASSERT 调用的行(而不是像其他一些 ASSERT 函数那样的反汇编)。所以这一切都非常有效。
但真正酷的是显示失败的函数的名称。
然后我可以决定是否调试它,而无需尝试从文件名中猜测它所在的函数。
例如,如果我有以下功能:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
然后当 ASSERT 触发时,消息框会显示如下内容:
Function = CMainFrame::OnCreate
那么,在运行时找出当前函数名称的最简单方法是什么?
它不应该使用 MFC 或 .NET 框架,即使我确实使用了这两者。
它应该尽可能便携。