Есть идеи о том, что означает это сообщение?
Значение точно , что говорится в сообщении: средство трассировки реализовано только в gdbserver
, а не в самой GDB, поэтому вы не можете использовать tstart
при собственной отладке (когда GDB напрямую контролирует подчиненный (отлаживаемый) процесс).
Вместо этого вам нужно настроить сеанс удаленной отладки (который все еще можно выполнить на одном компьютере):
gdbserver :10000 ./a.out # start gdbserver listening on port 10000
В другом окне:
gdb -ex 'target remote :10000' ./a.out
Теперь у вас будет GDB с удаленной целью (которая gdbserver
работает на том же хосте), и tstart
и т. Д. Будут работать.
Обновление:
Но теперь я вижу следующее сообщение:
(gdb) tstart
Target does not support this command.
(gdb) r
The "remote" target does not support "run".
Прежде чем вы сможете использовать tstart
, вам нужно установить трассировку и действия, как описано здесь .
И вы не можете run
, потому что подчиненный процесс уже запущен. Вместо этого используйте continue
.
Обновление 2:
(gdb) trace testprog.c:273
Tracepoint 1 at 0x4578f7: file testprog.c, line 273.
(gdb) passcount 2 1
Setting tracepoint 1's passcount to 2
(gdb) actions 1
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
> collect id1
> end
(gdb) tstart
Target does not support this command
Звучит так, будто ваш gdbserver
старый и на самом деле не поддерживает трассировку.
Что делают
gdb --version
gdbserver --version
производства
Обновление 3:
Очевидно, что gdbserver
слишком стар.
Несмотря на то, что сама GDB поддерживала точки трассировки начиная с версии 4.17, gdbserver
только начала поддерживать точки трассировки с версией 7.2
Обновление 4:
где указать эту опцию "-f filename", которую моя программа принимает в качестве входных данных
Simple. Вы можете прочитать документацию для gdbserver, но я думаю, что вы ищете этот вызов:
gdbserver :10000 ./a.out -f filename