Toon posts:

[Linux]Geen debug info of debugging symbols

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben met een tutorial C en C++ voor Linux aan het instuderen.

Voor de moment ben ik aan het experimenteren met de debugger.

Mijn test programma noemt "reciprocal".

Om te debuggen moet je de optie "-g" geven bij gcc bij compileren.
Dan worden de functies zoals ze in je sourcecode staan ook in uw executable opgenomen zodat de debugger die kan tonen.

In dit programma is bewust een fout geprogrammeerd. (foutmelding bij oproepen van het programma zonder argumenten). Deze fout is om te illustreren.

Zie hieronder de uitvoer van GDB (debugger).
code:
1
2
3
4
5
6
(gdb) run
Starting program: /home/peter/dls/C-tutorial_examples/chapter_1_ex1/reciprocal 

Program received signal SIGSEGV, Segmentation fault.
0xb7d5e87b in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb)


Probleem is de twee vraagtekens.

Dit moest "int main(int argc, char **argv)" geweest zijn IPV twee vraagtekens.

Waarom doet die debugger dat toch??

Ik had nochtans met de -g optie van GCC opgedragen de debug info en functies mee te geven.

Mijn programma is wel groter dan compileren zonder debug info maar toch wordt deze info niet zichtbaar gemaakt.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je linked niet aan een debug libc denk ik. die error lijkt in libc te gebeuren. (stacktrace geefy je waarschijnlijk wel aan in welke functie van jouw code het mis dreigt te gaan)

[ Voor 38% gewijzigd door Zoijar op 26-05-2008 22:56 ]


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

type backtrace

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Verwijderd

Topicstarter
Volgens de tutorial verloopt dit anders en ik doe nochtans hetzelfde als er in geschreven staat.

Dit heb ik als uitvoer bij backtrace
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(gdb) backtrace
#0  0xb7ca787b in ?? () from /lib/tls/i686/cmov/libc.so.6
#1  0xbfaf6004 in ?? ()
#2  0xb7f167c4 in ?? ()
#3  0x00000004 in ?? ()
#4  0xb7dd2608 in ?? ()
#5  0x00000001 in ?? ()
#6  0xb7c8252c in ?? () from /lib/tls/i686/cmov/libc.so.6
#7  0xb7dd22a8 in ?? ()
#8  0xb7dd2758 in ?? ()
#9  0xffffffff in ?? ()
#10 0xb7f15ff4 in ?? () from /lib/ld-linux.so.2
#11 0x08048200 in ?? ()
#12 0xb7f16668 in _r_debug ()
#13 0xbfaf5fc0 in ?? ()
#14 0x00000000 in ?? ()
(gdb)

  • igmar
  • Registratie: April 2000
  • Laatst online: 06-11 09:18

igmar

ISO20022

En wat is de daadwerkelijk code ? Dit blijft anders giswerk.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:42
Kun je wat meer informatie geven over hoe je code build e.d.?

Ook zonder -g mee te geven zou je symbols in je executable moeten krijgen. Je zou dan in ieder geval je main-functie in de backtrace terug moeten zien. (Mét -g wordt veel meer wel meer informatie over types, variabelen, parameters, regelnummers e.d. toegevoegt.)

Het kan overigens wel zo zijn dat libc niet overal symbols van bevat, dus een aantal van die vraagtekens zijn wel te verwachten. Verder is het goed mogelijk dat door optimalisaties de stack frames niet goed ingesteld worden waardoor de debugger het pad terug naar je main-functie niet kan vinden. In dat geval klopt de stack trace dus eigenlijk niet. Als je wel door je programma kunt steppen en daarbij een geldige backtrace krijgt, maar die backtrace stuk gaat als je in een C library functie terechtkomt, is dat waarschijnlijk wat er aan de hand is.

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

en als je "-ggdb" gebruikt ?

Je stacktrace ziet er niet echt gezond uit...
Weet je zeker dat je crash ook niet voorkomt tijdens initialisatie van static variabelen/objecten/... ?

heb je toevallig je executable gestript?

[ Voor 83% gewijzigd door H!GHGuY op 27-05-2008 19:20 ]

ASSUME makes an ASS out of U and ME


Verwijderd

wat is de output van
objdump --syms /home/peter/dls/C-tutorial_examples/chapter_1_ex1/reciprocal
of
nm /home/peter/dls/C-tutorial_examples/chapter_1_ex1/reciprocal

(zou een lijst moeten zijn van al je symbols)

Daar naast, wat voor fout maak je?
Pagina: 1