我正在使用一个 C++ 项目(我不是该项目的作者),它有很多 MFC 字符串格式化函数。不幸的是,像%d
and之类的东西%s
非常接近(包括键盘上字母 d 和 s 的位置),一个可以与另一个互换。所以我有时可能会看到这样的代码行:
CString s;
s.Format(L"Value v=%s", 100); //Should've been %d instead
这会导致流程严重崩溃,在最终项目中很难定位和隔离。所以我正在考虑将Format
函数包装在我自己的覆盖中并捕获异常并在它作为未处理的异常抛出之前记录它。
所以我采用了以下构造:
__try
{
//Do the Format function here
}
__except(1)
{
//Log the error, etc.
}
但不幸的是,上面的构造没有从第一个代码块中捕获异常,所以我启动了 VS 2008 C++ 调试器并显示了这一点:
然后我尝试了这个:
try
{
//Do the Format function here
}
catch(int e)
{
//Do the logging
}
但这也没有抓住它。
那么我怎么能抓住这个错误呢?
PS。我还有第二个问题。是否有一种简单的方法可以覆盖 MFC 函数,例如Format?