Вопрос

Я использую DDD/GDB для отладки домашней игры, работающей на NintendoDS, созданной с помощью «arm-eabi-gcc (devkitARM Release 32) 4.5.1».К вашему сведению, я загрузил неразобранный двоичный файл .elf здесь, на случай, если кто-нибудь захочет повторить некоторые из шагов, описанных ниже.

  • Я прошу у GDB список одной из функций, находящихся в GameScript.o (GobExpression::eval), она прекрасно с ней справляется.

  • Я запрашиваю у GDB листинг SimpleGob::play, в том же GameScript.o он жалуется, что «Нет номера строки для SimpleGob::play».(сеанс Arm-eabi-gdb чуть ниже:)

рука-eabi-gdb AppleAssault.elf

GNU gdb (GDB) 7.2
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-eabi".
Reading symbols from AppleAssault.elf...done.
(gdb) list GobExpression::eval
342    bool eval(s16 data[REGISTERS], iGun **extra=0) {
343         GobCollision gc[2]={{0,0,data},{0,0,0}};
344         return eval(gc,extra);
345       }
346     
347       bool eval(GobCollision* c, iGun **extra=0) {
348         s16 *data=c[0].data;
349         s16 stack[STACKSIZE]; int sp=0;
350         u8 op;
351         if (!code) return true;
gdb) list SimpleGob::play
play    play()  
(gdb) list SimpleGob::play
No line number known for SimpleGob::play.

Однако, если я вызову Arm-eabi-objdump -drl AppleAssault.elf, он, очевидно, найдет некоторые номера строк, как они упомянуты в дампе:

0203c7f8 <_ZN9SimpleGob4playEv>:
_ZN9SimpleGob4playEv():
/beetle/hobby/DS/dsgametools/branches/companim/libgeds/source/GameObject.cpp:1710
 203c7f8:       b5f0            push    {r4, r5, r6, r7, lr}
 203c7fa:       465f            mov     r7, fp
 203c7fc:       4656            mov     r6, sl
 203c7fe:       464d            mov     r5, r9
 203c800:       4644            mov     r4, r8
 203c802:       b4f0            push    {r4, r5, r6, r7}
 203c804:       b0a7            sub     sp, #156        ; 0x9c
_ZN9CommonGob11gobDoChecksEv():
/beetle/hobby/DS/dsgametools/branches/companim/libgeds/source/GameObject.cpp:1430
 203c806:       7c03            ldrb    r3, [r0, #16]
_ZN9SimpleGob4playEv():
/beetle/hobby/DS/dsgametools/branches/companim/libgeds/source/GameObject.cpp:1710
 203c808:       1c05            adds    r5, r0, #0
_ZN9CommonGob11gobDoChecksEv():
/beetle/hobby/DS/dsgametools/branches/companim/libgeds/source/GameObject.cpp:1430
 203c80a:       2b00            cmp     r3, #0
 203c80c:       d100            bne.n   203c810 <_ZN9SimpleGob4playEv+0x18>
 203c80e:       e099            b.n     203c944 <_ZN9SimpleGob4playEv+0x14c>

Файл скомпилирован с помощью arm-eabi-g++ -MMD -MP -MF /beetle/hobby/DS/dsgametools/branches/companim/libgeds/build/GameObject.d -g -march=armv5te -mtune=arm946e-s -fomit-frame-pointer -ffast-math -mthumb -mthumb-interwork {include path stripped} -DARM9 -fno-rtti -Wall -O2 -c /beetle/hobby/DS/dsgametools/branches/companim/libgeds/source/GameObject.cpp -o GameObject.o, то есть с включенными символами отладки, упакованными в архив .a и, наконец, связанными с программой.Перекомпиляция с -O0, похоже, не помогает.

Я видел обходной путь на GDB не может найти номера строк здесь предлагается использовать файл add-symbol, хотя я не совсем знаю, какой файл символов я бы добавил...Упускаю ли я тонкую ключевую концепцию символов отладки GDB, которая объясняла бы, чего (некоторой части) не хватает моим программам, чтобы GDB мог аннотировать их номерами строк?

Это было полезно?

Решение

Пытаться -gstabs+ при компиляции с g++ попробовать использовать информацию об отладке расширений GNU (понимаемую только gdb).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top