Как включить режим отладки в моей программе? - PullRequest
1 голос
/ 03 ноября 2011

У меня скоро должен быть проект об использовании сигналов и сигнализаторов, и я по сути с ним покончил; Однако я одержим с одной стороны. Вот часть, вставленная из подсказки моего учителя: «... Когда он получает sigusr2, он должен включаться или выключаться режим отладки, например если режим отладки в данный момент включен отключить отладку, если отладка выключена, отладка должна быть включена.

Когда отладка включена, ваша программа должна сообщать о итого каждые х секунд и игнорировать sigusr1. Когда отладка выключена, будильник должен быть выключен, а ваша программа должен обрабатывать sigusr1, как и раньше (то есть сообщать о состоянии всего) ".

Что именно он подразумевает под переключением в режим отладки? Единственный режим отладки, с которым я знаком, - это версия Eclipse. Спросив другого одноклассника, я получил ответ, что должен был создать свой собственный режим отладки, также я не уверен, что это значит. Может кто-нибудь пролить свет и направить меня в правильном направлении? Спасибо, что прочитали, и спасибо за помощь заранее!

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Это просто означает, что ваша программа хранит некоторую информацию о состоянии уровня отладки, например:

int debug_level = 0;

void log(const char * message)
{
  if (debug_level > 0)
  {
    printf("Debug message: %s\n", message);
  }
}

Тогда вы можете сказать log("starting loop"); или что-то подобное в вашей программе, и это будет тольковыводится, если уровень отладки достаточно высок.

Когда вы регистрируете обработчик сигнала, вы просто позволяете ему изменять глобальную переменную debug_level.(Убедитесь, что вы используете тип sigatomic_t для переменной, хотя вы можете безопасно изменить его из обработчика сигнала!)

2 голосов
/ 03 ноября 2011

Забудьте о «отладке» на мгновение и просто подумайте, что вашей программе нужно иметь два режима .В одном режиме он должен вести себя определенным образом, а в другом режиме он ведет себя по-другому.

Какой простой способ отслеживания двух состояний?Переменная с двумя (или более) возможными значениями, такими как bool.Поэтому объявите глобальную переменную, чтобы отслеживать, находитесь ли вы в одном режиме или в другом (но поскольку использование глобальной переменной bool из обработчика сигнала технически не поддерживается, вместо этого используйте sig_atomic_t):

sig_atomic_t in_debug_mode;

Когда вы получите сигнал, который определяет, в каком режиме должна работать ваша программа, измените значение переменной, а затем убедитесь, что ваша программа ведет себя в соответствии с этим режимом.Если вы получаете сигнал и вы не в режиме отладки, то установите in_debug_mode = true, настройте обработчик SIGALRM и отключите обработчик SIGUSR1.Если вы получили сигнал, и вы в режиме отладки, то установите in_debug_mode = false, очистите обработчик SIGALRM и установите обработчик SIGUSR1.

Имя изрежим не имеет значения.Для целей назначения он называется «режим отладки», но он не имеет ничего общего с функциями отладки любой другой программы, с которой вы, возможно, знакомы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...