Забудьте о «отладке» на мгновение и просто подумайте, что вашей программе нужно иметь два режима .В одном режиме он должен вести себя определенным образом, а в другом режиме он ведет себя по-другому.
Какой простой способ отслеживания двух состояний?Переменная с двумя (или более) возможными значениями, такими как bool
.Поэтому объявите глобальную переменную, чтобы отслеживать, находитесь ли вы в одном режиме или в другом (но поскольку использование глобальной переменной bool
из обработчика сигнала технически не поддерживается, вместо этого используйте sig_atomic_t
):
sig_atomic_t in_debug_mode;
Когда вы получите сигнал, который определяет, в каком режиме должна работать ваша программа, измените значение переменной, а затем убедитесь, что ваша программа ведет себя в соответствии с этим режимом.Если вы получаете сигнал и вы не в режиме отладки, то установите in_debug_mode = true
, настройте обработчик SIGALRM и отключите обработчик SIGUSR1.Если вы получили сигнал, и вы в режиме отладки, то установите in_debug_mode = false
, очистите обработчик SIGALRM и установите обработчик SIGUSR1.
Имя изрежим не имеет значения.Для целей назначения он называется «режим отладки», но он не имеет ничего общего с функциями отладки любой другой программы, с которой вы, возможно, знакомы.