多年来一直使用丑陋的MFC ASSERT宏,我终于决定放弃它并创建终极ASSERT宏。
获取文件和行号,甚至失败的表达式都没有问题。 我可以在其中显示一个带有Abort / Retry / Cancel按钮的消息框。
当我按下Retry按钮时,VS调试器跳转到包含ASSERT调用的行(而不是类似其他ASSERT函数的某个反汇编位置)。 因此,这基本上都在工作。
但是真正酷的是要显示失败的函数名。
然后我就可以决定是否调试它,而不必从文件名猜测它在哪个函数中。
例如,如果我有以下函数:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
ASSERT(lpCreateStruct->cx > 0);
...
}
然后当ASSERT触发时,消息框会显示类似于:
Function = CMainFrame::OnCreate
那么,在运行时找到当前函数名最简单的方法是什么?
它不应该使用MFC或.NET框架,尽管我两者都在使用。
它应该尽可能地可移植。