Question

J'utilise DDD / GDB pour déboguer un jeu Homebrew fonctionnant sur Nintendodds, construit avec "ARM-EABI-GCC (Devkitarm Release 32) 4.5.1". FYI, j'ai téléchargé le binaire sans dépression ici, au cas où quelqu'un voulait reproduire certaines des étapes ci-dessous.

  • Je demande à GDB une liste de l'une des fonctions assis dans GamesScript.o (gobexpression :: eval) Il le gère bien.

  • Je demande à GDB une liste de SimpleGob :: Play, dans le même jeu Gamescript.o, il se plaint que "aucun numéro de ligne connu pour SimpleGob :: Play". (Session ARM-EABI-GDB juste en dessous :)

ARM-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.

Cependant, si j'invoque Arm-eabi-Objdump -Drl Appleassault.elf, il trouve évidemment certains numéros de ligne, comme ils sont mentionnés dans le dépotoir:

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>

Le fichier est compilé avec 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, ainsi avec des symboles de débogage activés, emballé dans une archive .A et finalement lié au programme. Recompiler avec -O0 ne semble pas aider.

J'ai vu une solution de contournement GDB ne peut pas trouver de numéros de ligne Cela suggère d'utiliser un fichier add-symbol, bien que je ne sache pas trop quel fichier de symboles j'ajouterais ... est-ce que je manque un concept clé subtil de symboles de débogage GDB qui expliqueraient ce que (une partie de) mes programmes sont manquant pour GDB pour pouvoir l'annoter avec des numéros de ligne?

Était-ce utile?

La solution

Essayer -gstabs+ Lors de la compilation avec g++ pour essayer avec des informations de débogage d'extensions de GNU (ne comprise que par gdb).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top