Серверная программа находится в бесконечном цикле. Как это проверить? - PullRequest
3 голосов
/ 26 октября 2011

Серверная программа находится в бесконечном цикле.Как это проверить?

Мое решение:

использовать GDB для проверки значений условных переменных, управляющих циклом

Это нормально для небольших программ.

как это сделать для большой программы?

Если программа не работает в GDB, как обнаружить бесконечный цикл?

спасибо

Ответы [ 3 ]

6 голосов
/ 26 октября 2011

Вы можете использовать некоторую форму сторожевого таймера .Пусть программа выводит символ или периодически касается файла, поэтому, если он застревает в цикле, отдельный процесс может обнаружить, что сторожевой таймер не был обновлен, и завершить / сбросить процесс.встроите это в аппаратное обеспечение, и они будут автоматически сброшены, если вы не сбросите таймер.Это очень удобно:)

1 голос
/ 26 октября 2011

Обнаружение бесконечного цикла называется проблемой остановки , которая неразрешима.

Так что, в принципе, нет точного способа ее обнаружения.

1 голос
/ 26 октября 2011

Если программа работает на сервере, вы можете присоединить к ней процесс GDB, указав его pid.

Так, например, ищите pid процесса, используя ps:

пс топор | grep server_process

3789   ??  S      0:00.58 /usr/bin/server_process
3790   ??  S      0:00.58 /usr/bin/server_process
18002  ??  S      0:00.58 grep server_process

Вы, вероятно, хотите ребенка:

, поэтому используйте gdb для подключения к запущенному процессу

gdb /usr/bin/server_process 3790

.... загружает символы

gdb>

Удачной трассировки :)

Конечно, замените server_process именем вашей программы и соответствующим образом: P

...