Я хотел бы добавить код C # «только отладка», который запускается только в том случае, если его запрашивает отладчик. В C ++ я делал что-то похожее на следующее:
void foo()
{
// ...
#ifdef DEBUG
static bool s_bDoDebugOnlyCode = false;
if (s_bDoDebugOnlyCode)
{
// Debug only code here gets executed when the person debugging
// manually sets the bool above to true. It then stays for the rest
// of the session until they set it to false.
}
#endif
// ...
}
Я не могу сделать то же самое в C #, поскольку нет локальной статики.
Вопрос : Как лучше всего добиться этого на C #?
- Следует ли использовать статическое поле частного класса с директивами препроцессора C # (
#if/#endif DEBUG
)? - Должен ли я использовать атрибут Conditional (для хранения кода), а затем статическое поле частного класса ( не окруженное директивами препроцессора C #
#if/#endif DEBUG
?). - Что-то другое?
источник
Вы ищете
[ConditionalAttribute("DEBUG")]
атрибут.
Если вы, например, напишите такой метод, как:
[ConditionalAttribute("DEBUG")] public static void MyLovelyDebugInfoMethod(string message) { Console.WriteLine("This message was brought to you by your debugger : "); Console.WriteLine(message); }
любой вызов этого метода внутри вашего собственного кода будет выполняться только в режиме отладки. Если вы собираете свой проект в режиме выпуска, даже вызов «MyLovelyDebugInfoMethod» будет проигнорирован и выгружен из вашего двоичного файла.
Да, и еще одна вещь, если вы пытаетесь определить, отлаживается ли ваш код в данный момент в момент выполнения, также можно проверить, перехватывается ли текущий процесс JIT. Но это все вместе другой случай. Оставьте комментарий, если это то, что вы пытаетесь сделать.
источник
Вы можете попробовать это, если вам нужен только код для запуска, когда к процессу подключен отладчик.
if (Debugger.IsAttached) { // do some stuff here }
источник
Думаю, стоит упомянуть, что это
[ConditionalAttribute]
находится вSystem.Diagnostics;
пространстве имен. Я немного споткнулся, когда получил:Error 2 The type or namespace name 'ConditionalAttribute' could not be found (are you missing a using directive or an assembly reference?)
после использования в первый раз (думал, будет в
System
).источник
Если вы хотите знать, есть ли отладка, везде в программе. Использовать это.
Объявить глобальную переменную.
bool isDebug=false;
Создать функцию для проверки режима отладки
[ConditionalAttribute("DEBUG")] public static void isDebugging() { isDebug = true; }
В методе инициализации вызовите функцию
Теперь по всей программе. Вы можете проверить наличие отладки и выполнить операции. Надеюсь это поможет!
источник