2013-12-14 2 views
0

Я получаю странную ошибку gdb от info line.gdb info line: ... но не содержит кода

gdb) info line 
Line 252 of "main.c" is at address 0x7f29e979c987 <main+314> but contains no code. 

Но с другой стороны, я могу успешно перечислить код:

(gdb) l main.c:254 
249    batch_mode = 1; 
250    case 'd': 
251    daemon_mode = 1; 
252    break; 
253    case 'k': 
254    keep_kernel_mode = 1; 
255    break; 
256    case 'C': 
257    dryrun = 1; 
258    break; 
(gdb) 

И GDB, кажется, ясно сознавал исходного файла:

(gdb) info source 
Current source file is main.c 
Compilation directory is /home/charletr/src/quagga/zebra 
Located in /home/charletr/src/quagga/zebra/main.c 
Contains 414 lines. 
Source language is c. 
Compiled with DWARF 2 debugging format. 
Does not include preprocessor macro info. 

Но опять же, на с другой стороны, я не могу получить информационную строку, чтобы сказать разумные вещи: (это попытка распечатать информационную строку по адресу, указанному для кадра №1, где я уверен, что у меня есть исходный код)

(gdb) bt 
#0 0x00007f29e88431f3 in __select_nocancel() from /home/charletr/src/aries-uprevquagga/debug/lib/libc.so.6 
#1 0x00007f29e8f309eb in ??() 
#2 0x00007fffef3b58c0 in ??() 
#3 0x00007fffef3b5a70 in ??() 
#4 0x00007fffef3b5a60 in ??() 
#5 0x00007f29e99d68b8 in ??() 
#6 0x00007f29e99d6a28 in ??() 
#7 0x00007f29e99d69a8 in ??() 
#8 0x00007f29e99d6928 in ??() 
#9 0x00007f29e99d69a8 in ??() 
#10 0x00007fffef3b58e0 in ??() 
#11 0x00007fffef3b5960 in ??() 
#12 0x0000000000000000 in ??() 
(gdb) info line *0x00007f29e8f309eb 
No line number information available for address 0x7f29e8f309eb 

Что может быть несколько причин, по которым gdb:info line могут найти источник, но цифры не могут тонкие линии ??

Примечание: У меня очень сложная система сборки/целевая система. Я строил систему сборки и копировал объекты в целевую систему. Затем я запускаю gdbserver в целевой системе. Затем я запускаю gdb в системе сборки и использую команду target remote для подключения к gdbserver в целевой системе.

Будем надеяться, что Рики

+1

Была ли эта скомпилированные с любыми вариантами оптимизирующих на? – usr2564301

+0

да было. Я скомпилировал с помощью: «-g -O0» – user3101167

+0

Возможно ли, что здесь играют здесь динамические связи между моей системой сборки и целевой системой? – user3101167

ответ

0

я понял это. Я просто опубликую здесь, если это случится с кем-то еще. Таким образом, моя система сборки и целевая система имеют разные версии ядра Linux и, следовательно, разные версии libc (glibc). То, что мне нужно было сделать, - проинструктировать мой локальный gdb в системе сборки, чтобы использовать шину differnet, чтобы соответствовать тому, что можно было бы найти на удаленной цели. Я сделал это через файл .gdbinit как так:

set sysroot /opt/6WIND/contrib/toolchain/gcc-4.3.2-glibc-2.7/x86_64-pc-l‌​inux-gnu/sys-root/ 
set sysroot remote:/ 

- user3101167