Как вы помещаете условие «IF DEBUG» в программу на c #? - PullRequest
5 голосов
/ 16 июня 2010

Как поместить условие «IF DEBUG» в программу ac #, чтобы во время выполнения он игнорировал набор кода, если вы работаете в режиме отладки, и все же выполнял блок кода, если программа не работает в режиме отладки? Ситуация, в которой это можно использовать, заключается в том, что отметка времени берется в начале блока, а другая отметка времени берется в конце. Они вряд ли будут отличаться во время выполнения. Тем не менее, если вы шагаете по коду в режиме отладки, они будут сильно различаться, и условия ошибки в блоке if могут быть исключены, что приведет к несвоевременному (каламбурному) выполнению некоторого кода.

Ответы [ 7 ]

15 голосов
/ 16 июня 2010

Вы просто помещаете свой код в блок, подобный этому:

#IF DEBUG

//code goes here

#endif

Это не среда выполнения, это директива препроцессора, которая означает, что код в этом блоке даже не будет скомпилирован и не будет включен.

Если вы хотите проверить во время выполнения, если вы отлаживаете, вы можете проверить Debugger.IsAttached

5 голосов
/ 16 июня 2010

Используйте инструкцию препроцессора #if:

#if debug
    // run in debug mode
#else
    // run if not in debug mode
#endif
3 голосов
/ 16 июня 2010

Вы также можете использовать атрибут

[Conditional("Debug")]

в методах.

1 голос
/ 16 июня 2010

Еще пара деталей:

  • Вы можете заключить весь метод или просто блок кода или просто строку кода.
  • Вам нужно добавить using System.Diagnostics;
0 голосов
/ 16 июня 2010

Поскольку любой другой ответ (кроме одного) не отвечает на ваш вопрос, позвольте мне попробовать:

Если вы хотите иметь переключатель времени выполнения, вам понадобится способ получить информацию из вашей среды или из командной строки. Кроме того, как только вы получите эту информацию, вам нужно будет применить ее к вашей программе.

1) Для этого вам понадобится глобальная переменная.

bool bDebug;

2) получить отладочную информацию

bDebug = strcmp (getEnv ("DebuggingMode"), "1");  // you'll need to mess with this a little - do 'man getenv' and 'man strcmp' for an understanding of what I'm doing
  • или -

использует функцию getopt(), чтобы выяснить, включена ли отладка или

3) в любом месте кода, в котором вы хотите включить отладку, проверьте, установлен ли bDebug

   if (bDebug) {
   // do something
   }
0 голосов
/ 16 июня 2010
#if (DEBUG)
...
#else
...
#endif

см. Здесь: http://bloggingabout.net/blogs/rick/archive/2005/03/10/2396.aspx

0 голосов
/ 16 июня 2010
#if DEBUG
        // something
#elif
        // some other thing
#endif
...