-
1. Data: 2018-10-30 20:43:19
Temat: g++ debug bez inicjalizacji pamięci
Od: s...@g...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/
-
2. Data: 2018-10-31 07:57:19
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: Maciej Sobczak <s...@g...com>
> 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
-
3. Data: 2018-10-31 17:21:35
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: s...@g...com
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.
-
4. Data: 2018-10-31 17:25:20
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: s...@g...com
> 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?!?
-
5. Data: 2018-10-31 18:06:15
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: Wojciech Muła <w...@g...com>
On Tuesday, October 30, 2018 at 8:43:20 PM UTC+1, s...@g...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.
-
6. Data: 2018-10-31 18:19:17
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: s...@g...com
> Odpalałeś pod valgrindem?
Pod Raspberry nie działa.
> Skompilowałeś z sanitizerami?
A co to?!?
-
7. Data: 2018-11-01 02:54:16
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: bartekltg <b...@g...com>
On 31.10.2018 17:21, s...@g...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
-
8. Data: 2018-11-01 08:33:25
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: s...@g...com
> >>> 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.
-
9. Data: 2018-11-01 15:59:57
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: bartekltg <b...@g...com>
On 01.11.2018 08:33, s...@g...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
-
10. Data: 2018-11-21 14:17:31
Temat: Re: g++ debug bez inicjalizacji pamięci
Od: Wojciech Muła <w...@g...com>
On Wednesday, October 31, 2018 at 6:19:18 PM UTC+1, s...@g...com wrote:
> > Skompilowałeś z sanitizerami?
>
> A co to?!?
https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-O
ptions.html