コードを書くとき、コードにデバッグ メッセージを挿入することがよくあります。デバッグ メッセージはロガー クラスによって処理されます。ロガー クラスは、デバッグ モードでメッセージをファイルに出力し、リリース モードでそれらを破棄します。
次のようになります。
class Logger : IDisposable
{
private StreamWriter m_Logger = null;
public void Start(string logFile)
{
m_Logger = new StreamWriter(logFile);
m_Logger.AutoFlush = true;
}
public void Dispose()
{
if (m_Logger != null) m_Logger.Dispose();
}
public void WriteLine(string message)
{
if (m_Logger != null) m_Logger.WriteLine(message);
}
}
インスタンスは起動時に作成され、Program
クラスからアクセスできます。次に、次のようにデバッグを確認します。
#if DEBUG
Program.Log.Start("app.log");
#endif
これは、デバッグ モードではデバッグ情報をダンプし、リリース モードではダンプしないという点で、うまく機能します。ただし、 などのユーティリティを使用してリリースの実行可能ファイルを実行するとstrings
、デバッグ文字列が表示されます。リバースエンジニアリングを防ぐために、リリースビルドから完全に除外したいと思います。
これまでに見つけた唯一の解決策は、すべてのデバッグ メッセージをプリプロセッサ条件でラップすることです。
// < some code here >
#if DEBUG
Program.Log.WriteLine("Some debug message.");
#endif
// < more code here >
これはかなり退屈で醜いです。私が最初に考えたのは、ある種のプリプロセッサ マクロを使用することでしたが、C# はそれらをサポートしていません。現在使用しているソリューションよりもエレガントなソリューションはありますか?