Изучите, где моя программа застряла с помощью GDB - PullRequest
0 голосов
/ 31 марта 2011

Может, кто-нибудь подскажет, как проверить последнее место, где застряла моя программа.Это можно сделать с помощью gdb или любого системного вызова UNIX, который может работать в этом процессе.Вот ситуация.

У меня есть клиентский серверный код TCP с 6 клиентскими процессами и 6 серверными процессами (есть клиентская и серверная программа, и для выполнения в эксперименте создается 6 копий каждого)что некоторые из клиентов (2-4) застряли недетерминированным образом.У нас есть последовательный цикл for в каждом клиенте, который взаимодействует случайным образом с одним из серверов одновременно.Но после некоторых итераций в конце цикла клиент застревает.Я установил дисплеи, но он говорит мне, что код просто отказывается перейти к началу следующей итерации, хотя он завершил предыдущую итерацию.Когда я выполняю 'top -p', этот клиент показывает 100% загрузку ЦП и остается таким всегда.Около 98% использования простаивает.У любого есть идея с этим:)

ура ... Раман

1 Ответ

0 голосов
/ 31 марта 2011

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

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