2

プログラム全体に多数のアサートが散らばっているレガシー C DLL (ソース コードがあります) を使用しています。dll は C# Windows アプリで使用されています。

問題は、DLL にエラーがある場合に「アサーション エラー」が表示されないことです。Dll はコンソール アプリです (関連性があるかどうかは不明です)。何十ものアサートがあり、多くの余分なコードを追加せずにエラー メッセージ (またはフラグ) を C# アプリに戻す簡単な方法はありません。

アサートの出力を画面に強制する方法はありますか?

4

2 に答える 2

3

assert()C ライブラリ内のマクロの定義を確認してください。通常、「プラグ可能な」出力メカニズムがあります。最悪の場合、assert()自分で書き直す必要があります。

ここでの根本的な問題は、コンソール プログラムに通常とエラーの2 つの出力ストリームがあることです。このSystem.Diagnostics.Processクラスには、ストリームStandardErrorに書き込まれたメッセージをインターセプトするために使用できるプロパティがあります。stderror

于 2012-08-26T14:30:54.177 に答える
1

NDEBUG を定義すると、アサート メカニズムがオフになることに注意してください。その識別子は、リリース ビルド (/D オプション) で既定で定義されています。アサートが dll のデバッグ ビルドで動作するかどうかを確認し、動作する場合は、リリース プロジェクトの設定を編集して /D オプションまたは NDEBUG 定義を削除します。

于 2012-08-26T14:21:15.423 に答える