Странные ошибки при удаленном использовании gdb: что я делаю не так? - PullRequest
0 голосов
/ 17 октября 2011

У меня есть 64-битный удаленный компьютер, наковальня и 32-битный рабочий стол.

Я делаю программу под названием hello.c и на наковальне я компилирую это с

  $ gcc -ggdb -o hello hello.c

Он будет нормально запускаться и отлаживаться на наковальне.

Но я бы хотел отладить его с рабочего стола (чтобы я мог использовать отладчик через emacs)

Итак:

$gdbserver anvil:24000 hello
Process hello created; pid = 10991
Listening on port 24000

Но затем на рабочем столе я пытаюсь подключиться удаленно, и все, что я получаю, это странные ошибки Есть некоторые признаки подключения: после того, как я наберу target remote anvil: 24000 , другой конец напечатает «Удаленную отладку с хоста 10.17.20.149», то есть адрес моего рабочего стола.

Вот расшифровка:

jla@jaspden-desktop$ gdb hello

GNU gdb (GDB) Fedora (7.2-51.fc14)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/jla/myco/chip_test/hello...done.
(gdb) target remote anvil:24000
Remote debugging using anvil:24000
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x0000003ed0100a80 in ?? ()
(gdb) b main
Breakpoint 1 at 0x4004b7: file hello.c, line 6.
(gdb) run
The "remote" target does not support "run".  Try "help target" or "continue".
(gdb) continue
Continuing.

Program received signal SIGTRAP, Trace/breakpoint trap.
0x00000000004003f6 in _start ()
(gdb) 

Кто-нибудь знает, что я делаю не так?

1 Ответ

1 голос
/ 17 октября 2011

Кто-нибудь знает, что я делаю не так?

gcc -ggdb -o hello hello.c

Это, вероятно, приводит к созданию 64-битного двоичного файла (хотя мы не можем точно сказать, что вы предоставили до сих пор). Как я уже говорил , не имеет значения, что наковальня - это 64-битная машина. Важно то, какой двоичный файл вы пытаетесь отлаживать.

Что говорит file hello?

GNU gdb (GDB) Fedora (7.2-51.fc14)
...
This GDB was configured as "i686-redhat-linux-gnu".

Это проблема: если hello является 64-битным двоичным файлом, вы не можете отлаживать его с этой версией gdb. Вам нужно будет собрать новую версию с настройками --host=i686-linux и --target=x86_64-linux.

...