Отладка с помощью GDB на нескольких процессах
Не вдаваясь в подробности, я работаю над программой, которая состоит из нескольких отдельных процессов, работающих на встроенной ОС ROS QNX. У них нет отношений родитель-ребенок, они все порождаются с помощью spawnlp(P_NOWAIT, ...)
и все они общаются друг с другом, используя механизм IPC, предоставляемый ОС.
Когда я отлаживаю с помощью GDB и достигаю точки останова в процессе, в котором я работаю, все мои потоки приостанавливаются, и это здорово. Но есть ли способ заставить его приостановить выполнение других моих процессов? Прямо сейчас происходит то, что все остальные процессы продолжают работать, пока мой процесс приостановлен, поэтому все очереди IPC переполняются и т. Д. И т. Д.
Заранее спасибо,
HF
1 ответ
Вы можете связать список команд GDB с каждой точкой останова. Поэтому, когда вы достигаете точки останова в процессе A, вы можете, например, отправить SIGTRAP процессу B, который должен поместить его в отладчик:
(gdb) b main
Breakpoint 1 at 0x804834a: file testA.c, line 40.
(gdb) command
Type commands for when breakpoint 1 is hit, one per line.
End with a line saying just "end".
>shell kill -s TRAP `pidof testB`
>end
(gdb)
Больше информации в списках команд точек останова