Я не верю, что есть один, простой, ответ на отладку «много удаленных приложений». Да, вы можете подключиться к процессу на другом компьютере и выполнить его в GDB. Но неудобно отлаживать большое количество взаимозависимых процессов, особенно когда проблема сложная.
Я считаю, что хороший набор возможностей ведения журнала в коде, дополненный дополнительными журналами для конкретной отладки при необходимости, с большей вероятностью даст вам хороший/быстрый результат.
Другим вариантом может быть запуск процессов на одной машине, а не на нескольких машинах. Возможно, даже использовать потоки в рамках одного процесса, чтобы имитировать поведение нескольких машин, упрощая процесс отладки. Конечно, это не мешает ошибкам, которые появляются ТОЛЬКО при запуске 20 процессов на 20 разных машинах. Но основная идея - сократить количество этих ошибок до минимума и отладить большинство вещей в «более простой среде».
Агрессивное использование парадигм оборонительного программирования, таких как либеральное использование assert
, является, пожалуй, хорошей идеей (возможно, с макросом, чтобы отключить его для производственных запусков, но убедитесь, что вы не просто оставляете пути ошибок полностью непроверенными - Намного сложнее обнаружить, что причина, по которой происходит сбой, заключается в том, что сбой памяти не удался, чем отследить, где указатель NULL пришел из примерно 20 вызовов функций от отказавшего выделения.
Интересный вопрос. Я бы сначала отлаживал его для 2 или 3 узлов (например, используя 2 или 3 терминала). Остерегайтесь [heisenbugs] (http://en.wikipedia.org/wiki/Heisenbug) –
Это был подход, который я использовал до сих пор. Но все же мне интересно, как я могу подключить каждый gdbserver в сеансе master gdb. –