Переменная экземпляра, вероятно, будет способом сделать то, что вы хотите.Вы можете сделать его статическим, чтобы сохранить одно и то же значение в течение жизни программы (или потока в зависимости от вашей статической модели памяти), или сделать его обычным экземпляром var, чтобы управлять им в течение жизни экземпляра объекта.Если этот экземпляр является одиночным, они будут вести себя одинаково.
#if DEBUG
private /*static*/ bool s_bDoDebugOnlyCode = false;
#endif
void foo()
{
// ...
#if DEBUG
if (s_bDoDebugOnlyCode)
{
// Code here gets executed only when compiled with the DEBUG constant,
// and 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
// ...
}
Просто чтобы завершить, прагмы (директивы препроцессора) считаются чем-то вроде клуджа, используемого для управления потоком программ.В .NET есть встроенный ответ на половину этой проблемы, использующий атрибут «Условный».
private /*static*/ bool doDebugOnlyCode = false;
[Conditional("DEBUG")]
void foo()
{
// ...
if (doDebugOnlyCode)
{
// Code here gets executed only when compiled with the DEBUG constant,
// and 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.
}
// ...
}
Нет прагм, намного чище.Недостатком является то, что Условное можно применять только к методам, поэтому вам придется иметь дело с булевой переменной, которая ничего не делает в сборке релиза.Поскольку переменная существует исключительно для переключения с хоста исполнения VS, и в сборке выпуска ее значение не имеет значения, оно довольно безвредно.