Отладчик gdb, оказывается, очень мощная штука - умеет ловить сигналы, выполнять программу в обратном направлении, показывать стек и массу других интересных вещей.
Во многих ОС gdb не может отлаживать программы, порождающие сыновние процессы fork-ом. После форка отладчик будет отслеживать только отцовский процесс. Если в сыновьем процессе есть точка останова (брякпоинт) - он получит SIGTRAP и завершится. Но есть способ обхода этого ограничения, который описан здесь: https://sourceware.org/gdb/onlinedocs/gdb/Forks.html
В двух словах это делается так: ставим в сыне sleep, пока он спит, с помощью ps узнаем его pid, запускаем еще один экземпляр gdb, который прикрепляем к сыну по его pid.
А вот под Линуксом отладка форкающихся программ возможна. По той же ссылки приведены соответствующие флаги.
2 комментария:
Во многих ОС gdb не может отлаживать программы, порождающие сыновние процессы fork-ом. После форка отладчик будет отслеживать только отцовский процесс. Если в сыновьем процессе есть точка останова (брякпоинт) - он получит SIGTRAP и завершится. Но есть способ обхода этого ограничения, который описан здесь: https://sourceware.org/gdb/onlinedocs/gdb/Forks.html
В двух словах это делается так: ставим в сыне sleep, пока он спит, с помощью ps узнаем его pid, запускаем еще один экземпляр gdb, который прикрепляем к сыну по его pid.
А вот под Линуксом отладка форкающихся программ возможна. По той же ссылки приведены соответствующие флаги.
Отправить комментарий