[ anatogen @ 10.12.2001. 10:49 ] @
Koriscenjem parametra -g gcc dodaje dodatne inforamcije potrebne za debagovanje programa, e interesuje me da li se te informacije dodaju prilikom stvaranja objektnih fajlocva ili prilikom vezivanja istih?
Takodje ako neko zna sta se to dodaje?
[ Ivan Dimkovic @ 10.12.2001. 11:38 ] @
Tokom kompajliranja kompajler dodaje imena funkcija, imena objekata i promenljivih u .obj fajl, kao i reference na source kod - kako bi debugger znao kako koju promenljivu da nazove i prikaze.

Za Linux ne znam, ali za Win32 - linker tokom povezivanja u izvrsni fajl ili ubaci sve simbole iz .obj fajlova ili ubaci tabelu sa referencama na simbol fajlove (tzv. PDB fajl)
[ Vojislav Milunovic @ 10.12.2001. 12:30 ] @
Za to -g moras da kompajliras program sa gdb flagom ja mislim da je flag gcc -g ili gcc --gdb pogledaj vise u man stvarno sam vec to zaboravio :)
[ anatogen @ 12.12.2001. 10:00 ] @
Citat:
Ivan Dimkovic:
Tokom kompajliranja kompajler dodaje imena funkcija, imena objekata i promenljivih u .obj fajl, kao i reference na source kod - kako bi debugger znao kako koju promenljivu da nazove i prikaze.


E pa da, hvala, inace exe. fajl je narastao od 3Kb do 22Kb od tih informacija...

Inateresuje me kako uopste radi debager, da li se ponasa kao neki interpreter ili mozda se, ne znam, moj program izvrsava kao thread zajedno sa njim posto vidim da postoji samo jedan proces...

[ Vojislav Milunovic @ 12.12.2001. 13:12 ] @
A lepo radi debugger uzmimo recimo gdb za Linux. Korisits funkciju ptrace a image procesa i instrukcije i symbole mozes da nadjes preko ELF specifikacije (otovrsi file, ucitas program header, pa debug informations i symbole ako ova dva poslednja nisu stripovana). Onda mozes da udjes u signle step mod debugovanja (to radis sa PTRACE_SINGLE) to je ono instrukcija po instrukcija a mozes i da ga pustis da se izvrsava mislim da to moze sa PTRACE_CONTINUE (ne secam se stvarno). Sve u svemu izgleda da gdb odbacuje ptrace() syscall kao funkciju za pracenje tako da sad meni licno nije jasno kako on prati program. grep -r ptrace ./* na gdb source u FreeBSD stablu daje mozda 3 ptrace funkcije sto ukazuje da se ne koristi taj pristup za pracenje.
[ anatogen @ 13.12.2001. 13:34 ] @
E ovaj gcc je lud ko struja... ladno iskompajliran program ima instrukciju: "movl %eax, %eax".
Dal' su ovo u intelu onako iz zeznja ugradili ili...
Ovo je dobijeno pri default optimizaciji koje ocigledno nema, sa -O2 nema neceg ovakvog :)
[ Vojislav Milunovic @ 14.12.2001. 00:58 ] @
Ako program radi kako ti oces i radi sta treba sta te briga sta gcc radi :)
[ Jovan Marjanovic @ 14.12.2001. 11:10 ] @
Citat:
Vojislav Milunovic:
Ako program radi kako ti oces i radi sta treba sta te briga sta gcc radi :)


Pretpostavljam da iz tog razloga par nas nije ni htelo da odgovara na ovo pitanje ...

Ako vec znas da -g u gcc-u dodje debug simbole, kakve ima veze da li se dodaju u objekt fajlove, ili pri linkanju.
Inace, ako malo bolje razmislis, kako moze linker (/usr/bin/ld) da zna o nekakvim debug simbolima ako doticni ne postoje u objekt fajlovima ?
[ anatogen @ 14.12.2001. 16:09 ] @
Citat:
blue:
Pretpostavljam da iz tog razloga par nas nije ni htelo da odgovara na ovo pitanje ...


Hm, cini mi se da je Vojislav odgovorio na moju poslednju poruku a ne na prvu al' ajd'...

Inace, trenutno me vise interesuje kako program radi ono sto ja hocu da radi nego da radi ono sto ja hocu da radi... :)

Citat:
blue:
Inace, ako malo bolje razmislis, kako moze linker (/usr/bin/ld) da zna o nekakvim debug simbolima ako doticni ne postoje u objekt fajlovima ?


Citat:
Ivan Dimkovic:
Za Linux ne znam, ali za Win32 - linker tokom povezivanja u izvrsni fajl ili ubaci sve simbole iz .obj fajlova ili ubaci tabelu sa referencama na simbol fajlove (tzv. PDB fajl)