2012-10-18 9 views
20

私はこのコードを私のC#クラスに持っています。コード内#if DEBUGが実行されるとき

#if DEBUG 

パスが実行されますないときに私はお聞きしたかった何

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

はありますか?私は、Visual Studioでのデバッグセッションを実行すると、それは

  1. を実行しますでしょうか?

  2. 私は手動で問題のexeまたはdllをデバッグフォルダから実行していますか?
  3. その他の事情を言いましたか?
+2

'#if DEBUG'は実行されませんが、コードのコンパイルに影響します。 –

答えて

31

#if DEBUGために手動で設定することができますが

DEBUGは、デフォルトのセットです。

DEBUG定数を定義するとコンパイルされます。もちろん、Debug Build Configurationではデフォルトです。

のVisual Studio 2010のプロジェクトプロパティ:Define DEBUG constantがチェックされている Visual Studio 2010 Project Properties

場合はVSがコンパイルされます:エルス(チェックしない)

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

VSは、コンパイルします:

private const string BASE_URL = "http://www.b.com//"; 
+0

優れた答え。これはVS2017の場合でも同じです。 – robnick

12

これはプリプロセッサディレクティブです。デバッグビルドを行うと(特にDEBUG定数が定義されている場合)、DEBUGパートのコードがコンパイルされます。私。デバッグビルドを行う場合、BASE_URLはwww.a.comを指します。それ以外の場合は、www.b.comを参照します。

7

DEBUGディレクティブでコンパイルするとき。つまり、設定されている場合は、最初の行だけがコンパイルされたバイナリの一部になり、設定されていなければ、2行目はバイナリの一部になります。あなたはVSでデバッグ設定をコンパイルしているときに、それはプリプロセッサの定義だ任意の構成

2

の場合あなたはDEBUG設定、else linの前のコードでコンパイルしていますeはコンパイルされ、他方はコンパイルされません。他の設定でコンパイルすると、2行目はコンパイルされ、1行目はコンパイルされません。

+0

VSのプロジェクトのデフォルト設定ではTrueですが、VSを使用しない場合や、設定を変更すると_any_設定のDEBUGシンボルが表示される場合があります(ご希望の場合はリリースを含みます)。 –

+0

@RuneFS良い点、ありがとうございます。 –

3

これは「コンパイラ指令」です。つまり、#ifを使用してビルドプロセス(またはコンパイル)からコードを実際に組み込むか除外します。つまり、DEBUGシンボルはプロジェクトのプロパティ、およびVisual Studioのプロパティは、一般に、 "リリース"ビルドで自動的に削除されます。

基本的に、Visual Studioでデバッグを実行する必要はなく、特定のフォルダに入れる必要はありません。コードはちょうどそのように構築されています。

1

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

enter image description here

0

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

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

設定:アクティブ(リリース)の場合、リリース設定が有効です。下のコードはコンソールに印刷されます。

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

あなたは「デバッグ/リリース/構成マネージャ」開発者のほとんどがそれを知っているように右のツールMenu.Apologiesの下のドロップダウンを使用DebugとReleaseモードを切り替えたい場合は...しかし、時々見落とされます上記のコードが正しく動作しない理由を混乱させます。

関連する問題