Release ビルド モードと Debug ビルド モードの違いは理解できたと思います。主な違いは、デバッグ モードでは、生成される実行可能ファイルが最適化されず (デバッグが難しくなる可能性があるため)、デバッグ シンボルが含まれることです。
WinMerge の外部依存関係の 1 つである PCRE をビルドしているときに、これまで見たことのないビルド モードに気付きました: RelWithDebInfo.
Debug と RelWithDebInfo の違いについては、http ://www.cmake.org/pipermail/cmake/2001-October/002479.html に記載されています。exerpt: 「RelwithDebInfo はリリース モードと非常によく似ています。完全に最適化されたコードを生成しますが、プログラム データベースを構築し、デバッグ行情報を挿入して、デバッガーがいつでもコードのどこにいるかを推測できるようにします。」
これは非常に良いアイデアのように思えますが、セットアップ方法が必ずしも明白であるとは限りません。このリンクでは、VC++ でこれを有効にする方法について説明しています: http://www.cygnus-software.com/papers/release_debugging.html
何か不足していますか、それともすべてのリリース コードを RelWithDebInfo としてコンパイルするのは意味がありませんか?