私は、多くの MFC 文字列書式設定関数を持つ C++ プロジェクト (私は作成者ではありません) を使用しています。残念ながら、 と のようなもの%d
は%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。そして、2 つ目の質問があります。たとえばFormatのような MFC 関数をオーバーライドする簡単な方法はありますか?