39

このコードはC#クラスにあります。

#if DEBUG
        private const string BASE_URL = "http://www.a.com/";
#else
        private const string BASE_URL = "http://www.b.com//";
#endif

私が聞きたかったのは、いつ

#if DEBUG

コード内のパスが実行されますか?

処刑されますか

  1. Visual Studioでデバッグセッションを実行するとどうなりますか?
  2. デバッグフォルダから問題のexeまたはdllを手動で実行するとどうなりますか?
  3. 私が言及するのを忘れた他の状況はありますか?
4

7 に答える 7

58

#if DEBUGこれはプリプロセッサの定義です。

DEBUG定数を定義するとコンパイルされます。はい、デバッグビルド構成のデフォルトです。

Visual Studio 2010プロジェクトのプロパティ: VisualStudio2010プロジェクトのプロパティ

チェックされている場合Define DEBUG constant、VSはコンパイルします:

private const string BASE_URL = "http://www.a.com/";

それ以外の場合(チェックされていない)VSはコンパイルします:

private const string BASE_URL = "http://www.b.com//";
于 2012-10-18T17:49:05.270 に答える
14

これはプリプロセッサディレクティブです。DEBUG部分のコードは、デバッグビルドを実行するときにコンパイルされます(より具体的には、DEBUG定数が定義されている場合)。つまり、デバッグビルドを実行すると、BASE_URLはwww.a.comを指します。それ以外の場合は、www.b.comを指します。

于 2012-10-18T17:48:03.177 に答える
11

VS 2017は実際にアクティブな構成を検知し、たとえば、リリース構成が選択されている場合、デバッグ条件をグレー表示します。

ここに画像の説明を入力してください

于 2017-10-19T15:38:28.303 に答える
9

DEBUGディレクティブを使用してコンパイルする場合。したがって、設定されている場合は最初の行のみがコンパイルされたバイナリの一部になり、設定されていない場合は2番目の行がバイナリの一部になります。

DEBUGは、VSでデバッグ構成をコンパイルするときにデフォルトで設定されますが、任意の構成に対して手動で設定できます。

于 2012-10-18T17:48:04.363 に答える
4

これは「コンパイラディレクティブ」です。つまり、入力した#ifに基づいて、ビルドプロセス(またはコンパイル)にコードを実際に含めるか除外します。つまり、DEBUGシンボルはプロジェクトのプロパティにあります。 、およびVisual Studioでは、通常、「リリース」ビルドで自動的に削除されます。

したがって、基本的には、デバッグで実行されているVisual Studioにある必要はなく、特定のフォルダーにある必要もありません。コードはそのように構築されているだけです。

于 2012-10-18T17:50:48.773 に答える
3

DEBUG構成でコンパイルしている場合、else行の前のコードはコンパイルされますが、他の行はコンパイルされません。他の構成でコンパイルする場合、2行目はコンパイルされますが、1行目はコンパイルされません。

于 2012-10-18T17:49:37.267 に答える
2

アプリケーションの[プロジェクトのプロパティ]->[ビルド]タブに移動します。構成:アクティブ(デバッグ)の場合、デバッグ構成が有効になります。以下のコードはコンソールに出力されます。

#if DEBUG
    Console.WriteLine("in debug mode...");
#endif

構成:アクティブ(リリース)の場合、リリース構成が有効になります。以下のコードがコンソールに出力されます。

#if RELEASE
    Console.WriteLine("in release mode...");
#endif

DEBUGモードとRELEASEモードを切り替える場合は、[ツール]メニューのすぐ下にある[デバッグ/リリース/構成マネージャー]ドロップダウンを使用します。ほとんどの開発者が知っていることをお詫びします...しかし、見落とされて混乱を引き起こすことがあります。正しく実行されていません。

于 2017-11-08T16:41:42.790 に答える