質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Q&A

解決済

2回答

2378閲覧

C#でのAssertion

BeatStar

総合スコア4962

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

0グッド

0クリップ

投稿2021/05/20 08:01

[概要] csc.exe を使った開発で Assertテストを行う方法が知りたい

趣味でやっています。

C#でのAssertionについてです。

VC#はとある事情によりインストール不可だとして、cscのみで開発しています。

Debug.Assertメソッドを使って単体テストを行いたいのですが、
これってVC#やその他ツールを使わないといけないのでしょうか。

できれば、cscのみで行いたいのですが。

たとえば、MinGWでのg++とGDBでのデバッグ等のような感じで、コマンドプロンプトだけでできたら楽なのですが……

[試したこと1]
$ csc /nologo -debug /out:main.eXe main.cs
のように"-debug"をつけてコンパイルし、
ソースコードは、

C#

1using System; 2using System.IO; 3using System.Diagnostics; 4 5namespace Sample{ 6 class EntryPoint{ 7 static void Main( string[] args ){ 8 int a = 100 * 2; 9 Debug.Assert( a == 100, "AssertionError" ); 10 } 11 } 12}

として実行しました。

→ ですが、結果は「何も表示されない」。

[試したこと2]
試したこと1の Mainメソッドの前に

[Conditional("DEBUG")]

を追加してみました。

→ ですが結果は同上。(= 何も表示されない)

[試したこと3]
試したこと1の Debug.Assertメソッドを Trace.Assertメソッドに書き換えてみました。

→ ですが結果は同上。(= 何も表示されない)

やはり、VC#等のIDEを導入しないとできないのでしょうか。
できれば(とある理由により)IDE等を使わずにコマンドプロンプト上だけで完結できればいいのですが。
(ソースコードは別)

[情報]
言語: C#
.NET Framework: 2.0 以降 (2.0の場合もある)
IDEの使用: 無し (= cscのみ )

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

プリプロセッサマクロDEBUGが定義されているときに有効になるので、csc.exeでのコンパイル時、-defineオプションで-define:DEBUG(あるいは省略形の-d:DEBUG)と追加してコンパイルすることで使えるようになるはずです。

CMD

1C> csc.exe -define:DEBUG main.cs

追記しました。

私自身System.Diagnostics.DebugAssertWriteを多用し、Visual StudioでのDEBUG/RELEASEビルドで切り替えていたのですが、内部でどう切り替えているのかまではそれほど気にしたことが無かったので確認してみました。.NET Framework 4.8のソースですが、
System.Diagnostics.Debug - NET Framework 4.8 Reference Source

それぞれのメソッドで[System.Diagnostics.Conditional("DEBUG")]が宣言されているので、DEBUGが定義されていないときは無効になるようなコードですね。

投稿2021/05/20 08:18

編集2021/05/20 10:12
dodox86

総合スコア9256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/05/20 08:20

ご回答ありがとうございます。 >> -define:DEBUG あー、そっちかぁ…… (MinGW + C++でやるときに -D... でやるアレみたいなやつか……)
dodox86

2021/05/20 08:26

ちなみにこちらのVS2019の環境下ではcsc.exeでのビルド時にAssert()に引っかかりました。 (csc.exeのバージョン 3.9.0-6.21160.10 (59eedc3)) https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.debug?view=net-5.0 のサンプルコードの冒頭に // Specify /d:DEBUG when compiling. とあります。また、System.Diagnostics.Debug.*系のメソッドはVisual StudioでのビルドでもReleaseビルドの時には無効になりますね。
BeatStar

2021/05/21 08:45

できました! ありがとうございます!
guest

0

DebugではなくてConsoleで出力すればいいです

投稿2021/05/20 08:13

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2021/05/20 08:15

ご回答ありがとうございます。 Console.WriteLineメソッドの方でしょうか?
y_waiwai

2021/05/20 08:17

そうですね 自分のnamespaceの中でDebugって名前のクラスつくってその中でConsoleで出力させるとか
BeatStar

2021/05/20 08:20

あー、それもアリですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問