Thread View: pl.comp.os.linux.programowanie
7 messages
7 total messages
Started by Marcin Laszewski
Fri, 11 Nov 2011 14:34
GCC + GDB + moj program = problemy
Author: Marcin Laszewski
Date: Fri, 11 Nov 2011 14:34
Date: Fri, 11 Nov 2011 14:34
116 lines
4151 bytes
4151 bytes
Witam,
Ponizej jest prosty program, ktory, przynajmniej na moich komputerach, nie
da sie porzadnie debugoac - nie mozna wejsc do funkcji 'fun' (polecenie
's'). Od razu wyswietla wynik dziala 'fun' i to od razu dwoch wywolan.
Co ciekawsze, jesli sie cokolwiek w programie zmieni, np. f=1 to nie ma tego
problemu. PRzy f=0 lub nieinicjwowanym w ogole - jest.
Czy u Was tez tak jest? Co tego moze byc przyczna? Jakies magiczene,
domyslne opcje 'optymalizacyjne'? Jak to zmienic?
Zapis dzialan:
-----------------------------------------------------------------------------------
laser@ml-linux-1:~$ cc -g -o xxx xxx.c
laser@ml-linux-1:~$ gdb xxx
warning: Can not parse XML syscalls information; XML support was disabled at compile time.
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /mnt/sdb1/home/users/laser/xxx...done.
(gdb) b main
Breakpoint 1 at 0x80483ef: file xxx.c, line 37.
(gdb) r
Starting program: /mnt/sdb1/home/users/laser/xxx
Breakpoint 1, main (argc=1, argv=0xbffff6c4) at xxx.c:37
37 fun(f, &o, &q, &r);
(gdb) p f
$1 = -1073744408
(gdb) s
aaa
aaa
Program exited normally.
(gdb) quit
--------------------------------------------------------------------------------------------------
Skrypt wykonany pią, 11 lis 2011, 15:13:31
Moj kompilator:
laser@ml-dom:~/laser/c/sms-1.0$ gcc -v
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-8'
--with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.4 --enable-shared --enable-multiarch
--enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib
--enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-targets=all --with-arch-32=i586
--with-tune=generic
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu
--target=i486-linux-gnu
Thread model: posix
gcc version 4.4.5 (Debian 4.4.5-8)
Program 'xxx.c':
-------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int fun(int f, unsigned char * a, unsigned * b, unsigned * c)
{
while(1)
{
puts("aaa");
if(f <= 0)
return 0;
}
return 0;
}
int main(int argc, const char * argv[])
{
int f/* = 0*/;
/* int f = 1;*/
int a;
int b;
const char * c;
char d;
int e;
unsigned char g;
int h;
unsigned char i;
FILE * j;
const char * k;
time_t l;
const char * m;
const char * n;
unsigned char o;
unsigned q, r;
fun(f, &o, &q, &r);
fun(f, &o, &q, &r);
return 0;
}
------------------------------------------------------------
--
ml
http://www.archimedes.eu.org/
Re: GCC + GDB + moj program = problemy
Author: Grzegorz Jablonski
Date: Fri, 11 Nov 2011 14:48
Date: Fri, 11 Nov 2011 14:48
19 lines
1701 bytes
1701 bytes
On 11/11/2011 03:34 PM, Marcin Laszewski wrote: > Witam, > > Ponizej jest prosty program, ktory, przynajmniej na moich komputerach, nie > da sie porzadnie debugoac - nie mozna wejsc do funkcji 'fun' (polecenie > 's'). Od razu wyswietla wynik dziala 'fun' i to od razu dwoch wywolan. > > Co ciekawsze, jesli sie cokolwiek w programie zmieni, np. f=1 to nie ma tego > problemu. PRzy f=0 lub nieinicjwowanym w ogole - jest. > > Czy u Was tez tak jest? Co tego moze byc przyczna? Jakies magiczene, > domyslne opcje 'optymalizacyjne'? Jak to zmienic? U mnie nie działa w dokładnie ten sam sposob. Natomiast jeżeli zamiast s wykonać cztery razy si, to wchodzi do funkcji fun i można ją już normalnie debugować. Pozdrawiam, GWJ
Re: GCC + GDB + moj program = problemy
Author: Marcin Laszewski
Date: Fri, 11 Nov 2011 21:44
Date: Fri, 11 Nov 2011 21:44
18 lines
1302 bytes
1302 bytes
Dnia 11.11.2011 Grzegorz Jablonski <gwj@invalid.com> napisał/a: > On 11/11/2011 03:34 PM, Marcin Laszewski wrote: >> (...) > U mnie nie działa w dokładnie ten sam sposob. A jak dziala? > Natomiast jeżeli zamiast s wykonać cztery razy si, to wchodzi do funkcji > fun i można ją już normalnie debugować. Czy moze wiesz czemu tak sie dzieje? Pozdrawiam, -- ml http://www.archimedes.eu.org/
Re: GCC + GDB + moj program = problemy
Author: Bartlomiej Lidke
Date: Sat, 12 Nov 2011 22:27
Date: Sat, 12 Nov 2011 22:27
58 lines
2945 bytes
2945 bytes
Marcin Laszewski <laser@www.allegro.pl> wrote:
> Czy u Was tez tak jest? Co tego moze byc przyczna?
tak ale zalezy od wersji gcc-a oraz przelacznika '-g'
gcc-4.4 z '-g'
(gdb) break fun
Breakpoint 1 at 0x80483cc: file test.c, line 17.
(gdb) disassemble fun
Dump of assembler code for function fun:
0x080483c4 <fun+0>: push %ebp
0x080483c5 <fun+1>: mov %esp,%ebp
0x080483c7 <fun+3>: sub $0x18,%esp
0x080483ca <fun+6>: jmp 0x80483cd <fun+9>
0x080483cc <fun+8>: nop
0x080483cd <fun+9>: movl $0x8048510,(%esp)
0x080483d4 <fun+16>: call 0x80482f8 <puts@plt>
0x080483d9 <fun+21>: cmpl $0x0,0x8(%ebp)
0x080483dd <fun+25>: jg 0x80483cc <fun+8>
0x080483df <fun+27>: mov $0x0,%eax
0x080483e4 <fun+32>: leave
0x080483e5 <fun+33>: ret
End of assembler dump.
ten 'nop' z 0x080483cc jest przeskakiwany wiec gdb sie na nim nie zatrzyma
gcc-4.4 bez '-g'
(gdb) break fun
Breakpoint 1 at 0x80483ca <--------- tym razem 'jmp' a nie 'nop'
(gdb) disassemble fun
Dump of assembler code for function fun:
0x080483c4 <fun+0>: push %ebp
0x080483c5 <fun+1>: mov %esp,%ebp
0x080483c7 <fun+3>: sub $0x18,%esp
0x080483ca <fun+6>: jmp 0x80483cd <fun+9>
0x080483cc <fun+8>: nop
0x080483cd <fun+9>: movl $0x8048510,(%esp)
0x080483d4 <fun+16>: call 0x80482f8 <puts@plt>
0x080483d9 <fun+21>: cmpl $0x0,0x8(%ebp)
0x080483dd <fun+25>: jg 0x80483cc <fun+8>
0x080483df <fun+27>: mov $0x0,%eax
0x080483e4 <fun+32>: leave
0x080483e5 <fun+33>: ret
End of assembler dump.
czyli ok bo 0x080483ca zlapie. starsze gcc u mnie ok. a wracajac do tego
gcc-4.4 to mozesz na nim zlapac breakpointa po adresie (jesli stwierdzisz,
ze puszcza Cie w jakies maliny): break *0x80483ca
calosc to moze byc jakis bug w gcc-4.4 albo gdb
--
butthead
o 'Niesmiertelnym' (c) Pleciucha:
"Jest to jedyny film, w którym Szkot gra Egipcjanina, który jest Hiszpanem
i Francuz, który gra Szkota, który jest Nowojorczykiem..."
Re: GCC + GDB + moj program = problemy
Author: Marcin Laszewski
Date: Sun, 13 Nov 2011 10:17
Date: Sun, 13 Nov 2011 10:17
23 lines
1832 bytes
1832 bytes
Dnia 12.11.2011 Bartlomiej Lidke <ohggurnq@rcs.cy.rot13.invalid> napisaĹ/a: > Marcin Laszewski <laser@www.allegro.pl> wrote: >> Czy u Was tez tak jest? Co tego moze byc przyczna? > (...) > czyli ok bo 0x080483ca zlapie. starsze gcc u mnie ok. a wracajac do tego > gcc-4.4 to mozesz na nim zlapac breakpointa po adresie (jesli stwierdzisz, > ze puszcza Cie w jakies maliny): break *0x80483ca Dzięki wielkie! Pisze sobie dużo w C, ale zawsze szerokim łukiem omijałem wszelką tematykę "błędów w gcc czy gdb", bo praktyka pokazywałą, że błędów trzeba zazwyczaj szukać u siebie i daleko nam do prefosjonalizmu ludzi, którzy tworzą GNU. Nie zanam się też wystarczająco na asemblerze, wiec jeszcze tylko jedna prośba: czy mógłbyś rzucić okiem co się zmienia jeśli z kodu źródłowego wyrzuci się jedną z (i tak nie użwanych) zmiennych z 'main'. Wtedy działa prawidłowo.... -- ml http://www.archimedes.eu.org/
Re: GCC + GDB + moj program = problemy
Author: Bartlomiej Lidke
Date: Sun, 13 Nov 2011 19:52
Date: Sun, 13 Nov 2011 19:52
16 lines
1607 bytes
1607 bytes
Marcin Laszewski <laser@www.allegro.pl> wrote:
> Nie zanam się też wystarczająco na asemblerze, wiec jeszcze tylko jedna
> prośba: czy mógłbyś rzucić okiem co się zmienia jeśli z kodu źródłowego
> wyrzuci się jedną z (i tak nie użwanych) zmiennych z 'main'. Wtedy działa
> prawidłowo....
hmmm, u mnie usuwanie nieuzywanych zmiennych nic nie zmienia. zmienia
ustawianie wartosci 'f' (jesli petla sie zapetla to trafia przed drugim
puts na nop-a)
--
butthead
o 'Niesmiertelnym' (c) Pleciucha:
"Jest to jedyny film, w którym Szkot gra Egipcjanina, który jest Hiszpanem
i Francuz, który gra Szkota, który jest Nowojorczykiem..."
Re: GCC + GDB + moj program = problemy
Author: Marcin Laszewski
Date: Mon, 14 Nov 2011 07:38
Date: Mon, 14 Nov 2011 07:38
23 lines
1845 bytes
1845 bytes
Dnia 13.11.2011 Bartlomiej Lidke <ohggurnq@rcs.cy.rot13.invalid> napisał/a: > Marcin Laszewski <laser@www.allegro.pl> wrote: >> Nie zanam się też wystarczająco na asemblerze, wiec jeszcze tylko jedna >> prośba: czy mógłbyś rzucić okiem co się zmienia jeśli z kodu źródłowego >> wyrzuci się jedną z (i tak nie użwanych) zmiennych z 'main'. Wtedy działa >> prawidłowo.... > > hmmm, u mnie usuwanie nieuzywanych zmiennych nic nie zmienia. zmienia > ustawianie wartosci 'f' (jesli petla sie zapetla to trafia przed drugim > puts na nop-a) Tak czy owak - to pewnie efekt dzialania optymalizacji. Grunt, ze to tylko problem w trybie odpluskwiania, a program generlaniedziala prawidlowo.\ Tylko co robic jak sie trafi na cos takiego w przyszlosci, w bardziej skomplikowanym przypadku i nie bedzie wiadomo o co chodzi... :( Dzieki! -- ml http://www.archimedes.eu.org/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads