Символы DEBUG и TRACE в C#
Символ DEBUG включает отладочные ветки, TRACE - расширенное
трассирование. В конфигурации Release обычно остаётся только TRACE.
Каждый блок #if смотрит только на свой символ и не отменяет соседний.
Объявим DEBUG и проверим TRACE отдельно. В консоли будут "debug" и "no trace", потому что TRACE не объявлен:
#define DEBUG
#if DEBUG
Console.WriteLine("debug");
#endif
#if TRACE
Console.WriteLine("trace");
#else
Console.WriteLine("no trace");
#endif
Оставьте объявленным только символ TRACE и выведите "signal".