У меня есть процесс TCP Svr, написанный на C и работающий на CentOS 5.5.Он действует как TCP-сервер для внешних клиентов, а также выполняет некоторую IPC-связь с другими процессами в системе, используя установленные доменные сокеты Unix.Это не многопоточный процесс.Это делает одну задачу за один раз.Существует функция epoll_wait (), которую я использую для прослушивания запросов либо на сокете TCP, либо на любом из сокетов IPC, которые он установил для внутренних процессов.Когда функция epoll_wait () прерывается, я обрабатываю запрос для любого пользователя и затем возвращаюсь в epoll_wait ()
У меня есть TCP-клиент, который подключается к этому процессу извне (не IPC).Он успешно подключается, отправляет запрос msg, получает ответ обратно.Я поместил это в бесконечный цикл, чтобы проверить его надежность и т. Д.
Через некоторое время TCP-сервер перестает отвечать на запросы, поступающие от TCP-клиента.TCP-клиент успешно подключается, отправляет сообщение с запросом, но не получает никаких ответных сообщений от TCP-сервера.
Так что я считаю, что TCP-сервер застрял где-то еще, пытается что-то сделать и не вернулся к epoll_wait () для обработки других входящих запросов. Я пытался выяснить это с помощью журналов, но этоне помогая мне понять, где именно застрял процесс.
Поэтому я хотел использовать любой отладчик, который может дать мне некоторую информацию (имя функции было бы замечательно), относительно того, что делает процесс.Устанавливать точки останова - это очень сложно, потому что у процесса TCP Server есть тонны файлов и функций ....
Я пытаюсь использовать DDD в CentOS 5.5, чтобы выяснить, что происходит.Я присоединяюсь к процессу успешно.Затем я нажимаю кнопку «Step», «Stepi» или «Next» .... но ничего не происходит ....
btw, когда я использую Eclipse для отладки, и присоединяюсь к этому процессу (или любому другому процессу).), Я всегда получаю "__kernel_vsyscall ()" .... Означает ли это, что программа по умолчанию прерывается во всех своих действиях?Если это так, как мне выйти из вызова __kernel_vsyscall (), чтобы продолжить работу в моей программе?Если я нажимаю f8, он выходит, но потом я не знаю, где он был, так как теряю трассировку стека ... Как я уже говорил ранее.Так как я не могу понять, где это было, я не знаю, где поставить точку останова ...
Итак, я хочу выяснить, где застрял мой процесс или что он делает, и попытаться отладить с этого момента....
Как мне поступить?
Спасибо, Амит