eGospodarka.pl

eGospodarka.plGrupypl.comp.programming › g++ debug bez inicjalizacji pamięci
Ilość wypowiedzi w tym wątku: 9

  • 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


strony : [ 1 ]



Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo:

Ok, rozumiem Strona wykorzystuje pliki cookies w celu prawidłowego jej działania oraz korzystania z narzędzi analitycznych, reklamowych, marketingowych i społecznościowych. Szczegóły znajdują się w Polityce Prywatności. Dalsze korzystanie ze strony oznacza, że zgadzasz się na ich użycie. Jeśli nie chcesz, aby pliki cookies były zapisywane w pamięci Twojego urządzenia, możesz to zmienić za pomocą ustawień przeglądarki.