Способы отладки gdb’ом или ddd’ом приложения с fork()
Я разрабатываю клиент серверное приложение на языке программирования C (Си). У меня как и у всех разработчиков возникает необходимость запуска приложения под отладчиком. В однопоточном приложении и приложении с thread'ами (нитями) все достаточно стандартно - просто запускаем его через $ gdb мое_приложение. Но в случае если отладчик наткнется на вызов fork() он переключится на parent (родитель) процесс, хотя обычно, в демонах, после первого fork()'а родитель завершает свою работу и по смылу нужно отлаживать child процесс. Для ddd и gbd можно писать скрипты при помощи которых можно указывать отладчику идти по parent пути или по child, также можно цепляться уже к запущенному и работающему приложению. Сейчас мы и разберем все эти способы отладки.
Отладка с выбором пути следования по вызовам fork()
Первый способ, он описан в документации к gdb. Весь смысл метода в том чтобы описать по какой ветке идти после вызова fork() и скормить это описание отладчику. Вот пример кода для запуска под отладчиком:
#include
#include
#include
#include
#define I_CHILD 1
#define I_PARENT 2
void dummy_function(int who_i) {
pid_t pid;
if (who_i == I_CHILD) {
printf("Child after first fork() call dummy_function() my pid is %i\n", getpid());
} else {
printf("Parent after first fork() call dummy_function() my pid is %i\n", getpid());
}
switch (pid = fork()) {
case -1:
printf("Second fork() ERROR\n");
if (errno == ENOMEM) {
printf("Memory is tight\n");
}
exit(-1);
case 0:
printf("I'm child after second fork() My pid is %i\n", getpid());
break;
default:
printf("I'm parent after second fork() My pid is %i My child's pid is %i\n", getpid(), pid);
break;
}
printf("PID %i exit\n", getpid());
exit(0);
}
int main(int argc, char *argv[]) {
pid_t pid;
printf("Example started with pid %i\n", getpid());
printf("Commandline args: ");
while (--argc > 0) {
printf("%s ", argv[argc]);
}
printf("\n");
switch (pid = fork()) {
case -1:
printf("First fork() ERROR\n");
if (errno == ENOMEM) {
printf("Memory is tight\n");
}
exit(-1);
case 0:
printf("I'm child after first fork() My pid is %i\n", getpid());
dummy_function(I_CHILD);
default:
printf("I'm parent after first fork() My pid is %i My child's pid is %i\n", getpid(), pid);
dummy_function(I_PARENT);
}
}
Сохраняем в файл fork.c компилим с ключами: -O0 - отключение оптимизации и -g - для сохранения кода в исполняемый файл (они нужны для отладчика):
$ gcc fork.c -O0 -g
запускаем:
$ ./a.out 1 2 3 4 5 6 7 8 9 10 11 12 13
Получаем что-то вроди этого:
Example started with pid 6990
Commandline args: 13 12 11 10 9 8 7 6 5 4 3 2 1
I'm parent after first fork() My pid is 6990 My child's pid is 6991
Parent after first fork() call dummy_function() my pid is 6990
I'm child after first fork() My pid is 6991
Child after first fork() call dummy_function() my pid is 6991
I'm parent after second fork() My pid is 6990 My child's pid is 6992
PID 6990 exit
I'm parent after second fork() My pid is 6991 My child's pid is 6993
PID 6991 exit
user@server-32:~/sandbox/gdb_fork_example$ I'm child after second fork() My pid is 6993
PID 6993 exit
I'm child after second fork() My pid is 6992
PID 6992 exit
Все программа работает, но вот незадача если мы запустим её под отладчиком то сможем отлаживать лишь самый первый процесс, в предыдущем примере у него был pid 6990. И так приступим
16 августа 2026 / 05:04
Люди подскажите Брат снова сорвался Родственники не знают что делать Таблетки не помогают Короче, только это реально спасло — нарколог на дом в краснодаре недорого Через пару часов человек пришёл в себя В общем, телефон и цены тут — нарколог на дом цена [url=https://kapelnicza.narkolog-na-dom-krasnodar13.ru]нарколог на дом цена[/url] Звоните прямо сейчас Перешлите тем кто в такой же ситуации
16 августа 2026 / 05:05
Слушайте кто сталкивался Брат снова сорвался Родственники не знают что делать Таблетки не помогают Короче, единственный кто реально помог — помощь нарколога на дому эффективно Через пару часов человек пришёл в себя В общем, телефон и цены тут — нарколог на дом круглосуточно [url=https://zapoj.narkolog-na-dom-krasnodar12.ru]нарколог на дом круглосуточно[/url] Нарколог на дом — это реальный выход Перешлите тем кто в такой же ситуации
16 августа 2026 / 08:16
Слушайте кто знает Брат снова сорвался Родственники не знают что делать В больницу тащить страшно Короче, врач приехал и поставил систему — анонимный вызов нарколога с гарантией Через пару часов человек пришёл в себя В общем, не потеряйте контакты — нарколог на дом клиника [url=https://czena.narkolog-na-dom-krasnodar22.ru]нарколог на дом клиника[/url] Нарколог на дом — это реальный выход Перешлите тем кто в такой же ситуации
16 августа 2026 / 10:10
Здорова, народ Брат снова сорвался Дети напуганы Нужен врач прямо сейчас Короче, только это реально спасло — помощь нарколога на дому эффективно Дал рекомендации и успокоил семью В общем, телефон и цены тут — наркология на дому вызов нарколога [url=https://czena.narkolog-na-dom-krasnodar22.ru]https://czena.narkolog-na-dom-krasnodar22.ru[/url] Нарколог на дом — это реальный выход Перешлите тем кто в такой же ситуации
16 августа 2026 / 11:13
Краснодар, всем привет Близкий человек уже несколько дней в запое Родственники не знают что делать В больницу тащить страшно Короче, врач приехал и поставил систему — анонимный вызов нарколога с гарантией Приехал через 40 минут В общем, жмите чтобы сохранить — срочная наркологическая помощь на дому [url=https://kodirovanie.narkolog-na-dom-krasnodar23.ru]срочная наркологическая помощь на дому[/url] Звоните прямо сейчас Перешлите тем кто в такой же ситуации
17 августа 2026 / 20:41
Люди подскажите Близкий человек уже несколько дней в запое Жена в истерике В больницу тащить страшно Короче, единственный кто реально помог — нарколог на дом реутов цены доступные Осмотрел и поставил капельницу В общем, вся инфа по ссылке — нарколог на дом реутов [url=https://klinika.narkolog-na-dom-moskva-tfb.ru]https://klinika.narkolog-na-dom-moskva-tfb.ru[/url] Звоните прямо сейчас Перешлите тем кто в такой же ситуации
17 августа 2026 / 23:07
Люди помогите советом Задолбался я уже искать нормальную кухню То кромка отваливается через месяц Короче, реальные мужики с цехом — кухни на заказ спб с доставкой Сделали за две недели В общем, сохраняйте в закладки — глория кухни [url=https://kuhni-spb-kqd.ru]глория кухни[/url] Проверяйте производителя по этому списку Сам мучался теперь делюсь
18 августа 2026 / 05:46
Man, moving is such a nightmare — had this chaos myself a few months ago, and honestly, it was a total disaster. First you collect boxes, then you realize how much junk you've accumulated. Friends recommended one company, but wanted to double-check. Long story short, if you're looking for good moving services around here, don't just grab the first ad. Because, companies based in nevada handle logistics better, especially with summer heat. I personally — asked about insurance and hidden fees — and trust me, saved me both money and nerves. So check this out where the best option popped up. moving companies in nevada [url=https://movers-in-nevada.com]https://movers-in-nevada.com[/url] Honestly, that resource cut my research in half. It shows pricing breakdowns — no fine-print tricks. Confirmed availability and they handled it professionally. Do your due diligence. Clarify the timeline. Quality service is priceless. Good luck with your move!
19 августа 2026 / 07:54
Здорова, народ Ситуация критическая Соседи стучат в стену Таблетки не помогают Короче, единственные кто реально помог — наркологическая помощь срочно Поставили капельницу с детоксикационным раствором В общем, вся инфа по ссылке — частная наркологическая клиника [url=https://zapoj.narkologicheskaya-pomoshh-balashikha.ru]частная наркологическая клиника[/url] Наркологическая помощь — это реальный выход Перешлите тем кто в такой же ситуации
19 августа 2026 / 08:02
Слушайте кто знает Муж просто потерял себя Родственники не знают что делать Таблетки не помогают Короче, врачи приехали и поставили систему — вывод из запоя на дому люберцы качественно Приехали через 40 минут В общем, телефон и цены тут — вывод из запоя дешево в люберцах [url=https://detoks-7qt.vyvod-iz-zapoya-na-domu-moskva.ru]https://detoks-7qt.vyvod-iz-zapoya-na-domu-moskva.ru[/url] Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации
19 августа 2026 / 08:11
Слушайте кто сталкивался Брат снова сорвался Жена в истерике Нужна срочная помощь Короче, единственные кто реально помог — вывод из запоя в балашихе быстро Сняли ломку и стабилизировали состояние В общем, телефон и цены тут — наркология балашиха [url=https://kapelnicza.narkologicheskaya-pomoshh-balashikha.ru]наркология балашиха[/url] Звоните прямо сейчас Перешлите тем кто в такой же ситуации
20 августа 2026 / 07:12
Слушайте кто сталкивался Муж просто потерял себя Соседи стучат в стену Нужна срочная помощь на дому Короче, только это реально спасло — снятие интоксикации на дому быстро Поставили капельницу с детоксикационным раствором В общем, не потеряйте контакты — нарколог вывод из запоя люберцы [url=https://stoimost.vyvod-iz-zapoya-na-domu-moskva-jst.ru]нарколог вывод из запоя люберцы[/url] Не ждите пока станет хуже Перешлите тем кто в такой же ситуации
21 августа 2026 / 01:16
Щёлково, всем привет Брат снова сорвался Жена в истерике Нужна срочная помощь на дому Короче, только это реально спасло — нарколог запой щелково с опытом Приехали через 40 минут В общем, не потеряйте контакты — вывод из запоя щёлково [url=https://anonimnyj.vyvod-iz-zapoya-na-domu-moskva-snp.ru]вывод из запоя щёлково[/url] Звоните прямо сейчас Перешлите тем кто в такой же ситуации
21 августа 2026 / 09:19
Люди помогите советом Муж просто потерял себя Жена в истерике В больницу тащить страшно Короче, только это реально спасло — вывод из запоя щёлково анонимно Через пару часов человек пришёл в себя В общем, не потеряйте контакты — вывод из запоя на дому в щелково [url=https://reabilitacziya.vyvod-iz-zapoya-na-domu-moskva-snp.ru]https://reabilitacziya.vyvod-iz-zapoya-na-domu-moskva-snp.ru[/url] Вывод из запоя на дому — это реальный выход Перешлите тем кто в такой же ситуации
21 августа 2026 / 10:09
Слушайте кто сталкивался Отец не выходит из штопора Соседи стучат в стену Таблетки не помогают Короче, единственное что вытащило из запоя — прокапаться на дому от алкоголя цена выгодная Сняли ломку и стабилизировали состояние В общем, вся инфа по ссылке — капельница от запоя клиника [url=https://kapelnica-ot-zapoya-kazan.ru]https://kapelnica-ot-zapoya-kazan.ru[/url] Не ждите пока станет хуже Перешлите тем кто в такой же ситуации
21 августа 2026 / 22:49
Люди подскажите Брат снова сорвался Соседи стучат в стену Таблетки не помогают Короче, врачи приехали и поставили систему — прокапаться от алкоголя на дому быстро Сняли ломку и стабилизировали состояние В общем, не потеряйте контакты — капельница от запоя анонимно [url=https://czena.kapelnica-ot-zapoya-kazan.ru]https://czena.kapelnica-ot-zapoya-kazan.ru[/url] Не ждите пока станет хуже Перешлите тем кто в такой же ситуации