Tracepoint не работает в GDB и показывает «Трассировка может быть запущена только на удаленных целях» - PullRequest
4 голосов
/ 01 февраля 2012

Я хочу использовать точки трассировки для отладки прог на локальной машине, где у меня есть полный доступ.Я могу установить точку трассировки и ее passcount, и использование информации tr дает мне

(gdb) info tr

Num Enb Address PassC StepC Что

1 y 0x080b7529 2 0в search_tcp на tcp_pkt.c: 412

Действия для трассировки 1: собирать конец потока

Затем я запускаю прогу, она работает как обычно и в конце, когда я даю tfind или tdump для сборатребуемые данные, которые он показывает:

(gdb) tfind 1

Трассировка может выполняться только на удаленных целях.

(gdb) tdump

Трассировка можетзапускаться только на удаленных целях.

Даже я пытался использовать «tstart», но он снова показывает «Трассировка может выполняться только на удаленных целях».

Любая идея о том, что означает этосообщение?Использование трассировки не поддерживается в настоящее время?ИЛИ это для отладки некоторой удаленной машины по локальной сети или другой сети?Любая помощь будет принята с благодарностью.

спасибо Викас

1 Ответ

11 голосов
/ 01 февраля 2012

Есть идеи о том, что означает это сообщение?

Значение точно , что говорится в сообщении: средство трассировки реализовано только в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...