Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #31919 > unrolled thread

g++ debug bez inicjalizacji pamięci

Started byszykcech@gmail.com
First post2018-10-30 12:43 -0700
Last post2018-11-21 05:17 -0800
Articles 10 — 4 participants

Back to article view | Back to pl.comp.programming


Contents

  g++ debug bez inicjalizacji pamięci szykcech@gmail.com - 2018-10-30 12:43 -0700
    Re: g++ debug bez inicjalizacji pamięci Maciej Sobczak <see.my.homepage@gmail.com> - 2018-10-30 23:57 -0700
      Re: g++ debug bez inicjalizacji pamięci szykcech@gmail.com - 2018-10-31 09:21 -0700
        Re: g++ debug bez inicjalizacji pamięci szykcech@gmail.com - 2018-10-31 09:25 -0700
        Re: g++ debug bez inicjalizacji pamięci bartekltg <bartekltg@gmail.com> - 2018-11-01 02:54 +0100
          Re: g++ debug bez inicjalizacji pamięci szykcech@gmail.com - 2018-11-01 00:33 -0700
            Re: g++ debug bez inicjalizacji pamięci bartekltg <bartekltg@gmail.com> - 2018-11-01 15:59 +0100
    Re: g++ debug bez inicjalizacji pamięci Wojciech Muła <wojtek.mula@gmail.com> - 2018-10-31 10:06 -0700
      Re: g++ debug bez inicjalizacji pamięci szykcech@gmail.com - 2018-10-31 10:19 -0700
        Re: g++ debug bez inicjalizacji pamięci Wojciech Muła <wojtek.mula@gmail.com> - 2018-11-21 05:17 -0800

#31919 — g++ debug bez inicjalizacji pamięci

Fromszykcech@gmail.com
Date2018-10-30 12:43 -0700
Subjectg++ debug bez inicjalizacji pamięci
Message-ID<2d28eae2-6996-4a78-a3ae-a0aec84a1a04@googlegroups.com>
Witam
Piszę w C++ i Qt na Linux-ie. Powracający problem jaki mam to różnice w działaniu wersji "debug" i "relese". 
Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie. To powoduje, że błedy wychdzą dopiero w wersji release bo w debug wszystko działa. Oczywiście to czyni całą deweloperkę koszmarem, bo w wersji release mamy do dyspozycji tylko komunikaty na konsolę (których w tej wersji normalnie nie powinno być). Jest jakiś sprytny parametr kompilatora g++ który pozwolił by wyłączyć inicjalizację pamięci?!? Szukałem przez chwilę po internetach, ale nie znajduję nic sensownego...

z góry dzięki i pozdro
Szyk Cech
--
http://szyk.jcom.pl/
http://szyk.free.of.pl/
http://szykcech.cba.pl/
http://szyk.000webhostapp.com/
http://www.geocities.ws/szyk/
http://szyk.wex.pl/

[toc] | [next] | [standalone]


#31920

FromMaciej Sobczak <see.my.homepage@gmail.com>
Date2018-10-30 23:57 -0700
Message-ID<1955d2cc-8d0c-4eae-b9b9-611430b20aae@googlegroups.com>
In reply to#31919
> Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie.

Ale jaka pamięć (nie) jest inicjalizowana zerami? Chodzi o obiekty statyczne (w tym globalne), czy dynamiczne?

> To powoduje, że błedy wychdzą dopiero w wersji release

Takie są najlepsze.

-- 
Maciej Sobczak * http://www.inspirel.com

[toc] | [prev] | [next] | [standalone]


#31921

Fromszykcech@gmail.com
Date2018-10-31 09:21 -0700
Message-ID<2a9826bb-a908-43ee-bc3b-073287ad720b@googlegroups.com>
In reply to#31920
W dniu środa, 31 października 2018 07:57:20 UTC+1 użytkownik Maciej Sobczak napisał:
> > Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie.
> 
> Ale jaka pamięć (nie) jest inicjalizowana zerami? Chodzi o obiekty statyczne (w tym globalne), czy dynamiczne?

G++ w wersji debug automatycznie inicjalizuje alokowaną pamięć zerami. G++ nie robi tego w wersji release
 
> > To powoduje, że błedy wychdzą dopiero w wersji release
> 
> Takie są najlepsze.

Dla mnie najgorsze, bo trzeba je lokalizować bez użycia śledzenia ani bez debugera.

[toc] | [prev] | [next] | [standalone]


#31922

Fromszykcech@gmail.com
Date2018-10-31 09:25 -0700
Message-ID<20039ed1-9ff4-4d5b-a1dd-df43f5a8e4a9@googlegroups.com>
In reply to#31921
> G++ w wersji debug automatycznie inicjalizuje alokowaną pamięć zerami. G++ nie robi tego w wersji release

Jak mawiają us-mani: What I mean was:

G++ kompilując program w wersji debug automatycznie dodaje kod inicjalizujący alokowaną pamięć zerami. G++ nie robi tego kompilując program w wersji release.
Jasne?!?

[toc] | [prev] | [next] | [standalone]


#31926

Frombartekltg <bartekltg@gmail.com>
Date2018-11-01 02:54 +0100
Message-ID<prdmc9$e8b$1@node2.news.atman.pl>
In reply to#31921
On 31.10.2018 17:21, szykcech@gmail.com wrote:
> W dniu środa, 31 października 2018 07:57:20 UTC+1 użytkownik Maciej Sobczak napisał:
>>> Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie.
>>
>> Ale jaka pamięć (nie) jest inicjalizowana zerami? Chodzi o obiekty statyczne (w tym globalne), czy dynamiczne?
> 
> G++ w wersji debug automatycznie inicjalizuje alokowaną pamięć zerami. G++ nie robi tego w wersji release

Wydaje mi się, że Maciejowi chodziło o co innego:

Co robisz, że używasz jakiejś pamięci, której nie dotknął
konstruktor jakeigoś obiektu.

Jeśli wychodzisz poza zakres vecrtora, opcja typu
_GLIBCXX_DEBUG  _GLIBXX_DEBUG_PEDANTIC
czyba dodawały sprawdzanie poprawnośći zakresu gdy używałeś [].

pzdr
bartekltg

[toc] | [prev] | [next] | [standalone]


#31927

Fromszykcech@gmail.com
Date2018-11-01 00:33 -0700
Message-ID<9f406662-30cc-4e29-8166-89ee3e2123be@googlegroups.com>
In reply to#31926
> >>> Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie.
> >>
> >> Ale jaka pamięć (nie) jest inicjalizowana zerami? Chodzi o obiekty statyczne (w tym globalne), czy dynamiczne?
> > 
> > G++ w wersji debug automatycznie inicjalizuje alokowaną pamięć zerami. G++ nie robi tego w wersji release
> 
> Wydaje mi się, że Maciejowi chodziło o co innego:
> 
> Co robisz, że używasz jakiejś pamięci, której nie dotknął
> konstruktor jakeigoś obiektu.

Głowny problem w tym programie to wskaźniki i zmienne typu int (i ich warianty). Wskaźniki globalne i w klasach wyszukałem i zainicjalizowałem. Jednak problem może dotyczyć zmiennych lokalnych. Wygląda nato, że w wersji debug są inicjalizowane przez kompilator, a w wersji release nie... I ja chcę by w wersji debug nie były inicjalizowane - by szybciej znaleźć błąd.

[toc] | [prev] | [next] | [standalone]


#31929

Frombartekltg <bartekltg@gmail.com>
Date2018-11-01 15:59 +0100
Message-ID<prf4dd$nac$1@node2.news.atman.pl>
In reply to#31927
On 01.11.2018 08:33, szykcech@gmail.com wrote:
>>>>> Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie.
>>>>
>>>> Ale jaka pamięć (nie) jest inicjalizowana zerami? Chodzi o obiekty statyczne (w tym globalne), czy dynamiczne?
>>>
>>> G++ w wersji debug automatycznie inicjalizuje alokowaną pamięć zerami. G++ nie robi tego w wersji release
>>
>> Wydaje mi się, że Maciejowi chodziło o co innego:
>>
>> Co robisz, że używasz jakiejś pamięci, której nie dotknął
>> konstruktor jakeigoś obiektu.
> 
> Głowny problem w tym programie to wskaźniki i zmienne typu int (i ich warianty). Wskaźniki globalne i w klasach wyszukałem i zainicjalizowałem. 

Wskaźniki to ogolnie coś, czego powinno się unikać w c++,
ale rozumiem, ujowo napisana biblioteka do raspi w stylu
procków embended  4kB ramu:-)

Podobnie globalne...

Może da się tego pozbyć;-)

>Jednak problem może dotyczyć zmiennych lokalnych. 
>Wygląda nato, że w wersji debug są inicjalizowane przez kompilator, 
> a w wersji release nie... I ja chcę by w wersji debug nie były 
 > inicjalizowane - by szybciej znaleźć błąd.

Nie deklaruj zmiennych bez przypisania.
Jeśli się nie da, a chcesz wyłapać (bez debugera;p) użycie
wskażnika bez zainicjalizoanej wartości, inicjalizuj je
na wartość, które na pewno wywali program.

No, chyba, że przewidujesz, żę wskaźnik możę na nic nie pokazywać w 
trakcie działąnia praogramu i wszędzie sprawdzasz, czy nie jest nulem,
to wtedy ręcznie inicjalizuj go na null. Ale IMHO to prawie zawsze
gorsze rozwiazanie

pzdr
bartekltg

[toc] | [prev] | [next] | [standalone]


#31923

FromWojciech Muła <wojtek.mula@gmail.com>
Date2018-10-31 10:06 -0700
Message-ID<e1792b0b-7028-48bb-9b8e-d209c6c939bb@googlegroups.com>
In reply to#31919
On Tuesday, October 30, 2018 at 8:43:20 PM UTC+1, szyk...@gmail.com wrote:
> Witam
> Piszę w C++ i Qt na Linux-ie. Powracający problem jaki mam to różnice w działaniu wersji "debug" i "relese". 
> Chodzi o to, że wersja debug ma inicjalizowaną pamięć zerami, a wersja release nie. To powoduje, że błedy wychdzą dopiero w wersji release bo w debug wszystko działa. Oczywiście to czyni całą deweloperkę koszmarem, bo w wersji release mamy do dyspozycji tylko komunikaty na konsolę (których w tej wersji normalnie nie powinno być). Jest jakiś sprytny parametr kompilatora g++ który pozwolił by wyłączyć inicjalizację pamięci?!? Szukałem przez chwilę po internetach, ale nie znajduję nic sensownego...

Odpalałeś pod valgrindem? Skompilowałeś z sanitizerami?

w.

[toc] | [prev] | [next] | [standalone]


#31924

Fromszykcech@gmail.com
Date2018-10-31 10:19 -0700
Message-ID<0018c10e-f0a9-4a03-a9ae-626720976288@googlegroups.com>
In reply to#31923
> Odpalałeś pod valgrindem?

Pod Raspberry nie działa.

> Skompilowałeś z sanitizerami?

A co to?!?

[toc] | [prev] | [next] | [standalone]


#32049

FromWojciech Muła <wojtek.mula@gmail.com>
Date2018-11-21 05:17 -0800
Message-ID<5912eda8-4539-4567-bf98-0014b11c55ac@googlegroups.com>
In reply to#31924
On Wednesday, October 31, 2018 at 6:19:18 PM UTC+1, szyk...@gmail.com wrote:
> > Skompilowałeś z sanitizerami?
> 
> A co to?!?

https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html

[toc] | [prev] | [standalone]


Back to top | Article view | pl.comp.programming


csiph-web