Clion problem z debuggerem

0

Witam, moze mi ktos pomoc bo nie moge ogarnac czemu mi sie nie pojawiaja zmienne w debugerze? Jestem niby connected ale nic nie moge zrobic, a Mingw mam zainstalowane, help please
Albo poleccie mi jakis program co jak w tym po prawej stronie sa podpowiedzi jak cos zle jest napisane. Z gory dziekuje

screenshot-20190519163045.png
screenshot-20190519163230.png

1

Nie wiem jak jest z CLion, ale po przyciemnionej ikonie run, a jasnej pause, przypuszczam, że program jest w stanie "run". Spauzuj go ikoną pauzy.

1

Może odpaliłeś debugger, ale nie doszedłeś do momentu uruchamiania Twojego kodu - dlatego też nie widzisz wartości zmiennych; spróbuj dać Run i niech dojdzie Ci do pierwszej czujki.

1

Pasowałoby jeszcze okienko stack coby się zorientować, gdzie jesteś, przez kilkukrotne step out wyjść do funkcji wywołującej, czasem debuger pchnie cię do niewłaściwego wątku, wtedy pomaga okienko threads, ale prościej będzie ustawić breakpoint zaraz na początku main.

P.S. powyżej była odpowiedź OP, ale się zbyła, więc moja odpowiedź odnosi się do niewidocznego już kodu z wywołaniem GetTlsValue.

0

Daniel uratowales system, wystarczylo ze dalem breakpointa zaraz po mainie i dziala. DZIEKUJE BARDZO !! :D

0

Masakryczny jest ten Clion, dochodz do funkcji i wchodze w nia a potem zatrzymuje mi sie debugger i nic nie moge zrobic, Polecacie jakies programy zeby po prawej stronie byly podpowiedzi i zeby debugger byl w miare normalny?
screenshot-20190519175919.png

0

Sa zmienne, nagle klikam zeby lecial dalej i zatrzymuje sie i wszystko znika.
screenshot-20190519180304.png
screenshot-20190519180321.png

0

Dobra instaluje Eclipse, mam nadzieje ze bedzie lepszy. Sorry za spam

0

Nie używam CLion, ale Twoja sytuacja wygląda jakby Twój program gdzieś wpadał w nieskończoną pętlę.

To mi wygląda na ikonę od ramek stosu - dzięki niej można zobaczyć jakie funkcje odłożyły swoje ramki na stosie.

screenshot-20190519181911.png

0

Odpalilem, ale nic to nie daje, jak klikam na next to znowu znika, masakra, sprobuje Eclipse. Dziekuje za pomoc tak czy siak

0

Polecacie jakies programy zeby po prawej stronie byly podpowiedzi i zeby debugger byl w miare normalny?

Na Windowsie to moim zdaniem Visual Studio jest najlepszy. Qt Creator też jest godny polecenia.

1

A w momencie jak Ci się debugger "wszystko znika", to nie zapominasz mu wrzucić znaku? Bo niewykluczone, że czeka na input ;)

0

Wlasnie skonczylem konfigurowac Eclipse, ale mysle ze wlasnie Visual Studio zainstaluje. Dzieki wszystkim

1

Zainstaluj sobie QtCreator. Tam są podpowiedzi na których Ci zależy, a poza tym daje więcej możliwości niż Eclipse. Visual z kolei (chyba) nie ma tych podpowiedzi.

0

Wlasnie zainstalowalem i jest kozak, ale mam problem bo pokazuje mi tylko pierwsza wartosc w tablicy, a nie cala tablice w debugerze, moze wiesz co musze zmienic zeby bylo ? Wypelnia sie dobrze, ale caly czas pokazuje tylko pierwsza wartosc
screenshot-20190519215451.png

0

Dobra juz ogarnalem ale ciezko ze tak przy kazdej tablicy ze wskaznikiem trzeba zmieniac zeby sie pokazywalo jako tablica. Ale ogolnie program sztos

0

Jest jakiś głębszy sens, że zamiast vec[i] używasz *(vec+i), albo zamiast vec+i (eventualnie &vec[i]) używasz &(*(vec+i))?

0

Tak, w tresci zadania nie moge uzywac odniesienia v[i] tylko musze *(v+i), wgl w zadnym zadaniu nie moge bo jest taki wymog..
Uwaga

Nie używaj odwołania tablicowego (T[xx]).

0

moj ulubiony blad SIGSEGV , wie ktos co tutaj jest zle zrobione?

int avg(const float* tab, unsigned int size, float *result)
if(tab == NULL || result == NULL) return 0;
    unsigned int i;

    for(i=0;i<=size-1;i++)
    {
        *result+=*(tab+i);          // Tutaj zrodlo bledu SIGSEGV 
    }
    *result = *result/size;

    return 1;
int main() {
    float T[100], suma = 0, srednia = 0;
    float *tab = T, *sumeczka = &suma, *sredniczka = &srednia;
    int size = 0;


    sum(tab, size, sumeczka);
    avg(tab, size, sredniczka);
1

Co dostaniesz w wyniku:

unsigned int i = 0;
i-=1;

(warunek i<=size-1 zamień na i<size).

0

dzieki, fakt ale czemu napisales i-=1; ? I da sie jakos efektywnie wykryc te bledy SIGSEGV? I tak musze poprawic te funkcje, bo sporo testow mi nie przechodza, masakra po prostu

1

Debuger pomaga w eliminacji błędów SIGSEGV Powinien się zatrzymać na problematycznym kodzie, wtedy podglądasz wartości zmiennych. Zobaczyłbyś, że i jest większe od 100 i pozostałoby szukanie - dlaczego? Osobiście najbardziej lubię debuger z Visual Studio.

Wracając do

Nie używaj odwołania tablicowego (T[xx])

możliwe, że chodzi o technikę eliminacji indeksu. Taki przykład:

void fill( double* dst, int dst_size, double fill_value )
{
    int i;
    for ( i = 0 ; i < dst_size ; ++i )
        dst[ i ] = fill_value;
}
/* Z eliminacją indeksu */
void fill( double* dst, int dst_size, double fill_value )
{
    double* end = dst + dst_size;
    for ( ; dst < end ; ++dst )
        *dst = fill_value;
}
0
-daniel- napisał(a):

Debuger pomaga w eliminacji błędów SIGSEGV Powinien się zatrzymać na problematycznym kodzie, wtedy podglądasz wartości zmiennych. Zobaczyłbyś, że i jest większe od 100 i pozostałoby szukanie - dlaczego? Osobiście najbardziej lubię debuger z Visual Studio.

Wracając do

Nie używaj odwołania tablicowego (T[xx])

możliwe, że chodzi o technikę eliminacji indeksu. Taki przykład:

void fill( double* dst, int dst_size, double fill_value )
{
    int i;
    for ( i = 0 ; i < dst_size ; ++i )
        dst[ i ] = fill_value;
}
/* Z eliminacją indeksu */
void fill( double* dst, int dst_size, double fill_value )
{
    double* end = dst + dst_size;
    for ( ; dst < end ; ++dst )
        *dst = fill_value;
}

jeszcze sie nie spotkalem z debuggerem, ktory pokaze mi SIGSEGV

0

Krew mnie zalewa, program dziala dobrze ale test sprawdza funkcje avg, podajac tablice i rozmiar, widze ze moja funkcja olewa sobie rozmiar i bierze 1 element wiecej, jak moge sprawdzic to u siebie co jest zle, bo siedze nad tym zenujacym zadaniem i nie moge sobie z nim poradzic, pomozcie mi prosze bo nie daje rady juz.

test : int res = avg((float[]){-3.779990, 0.275521, 0.410900, 4.680326}, 4, &result);

wynik powinien być równy 0.3966890916228847, a jest 2.219781⏎

int avg(const float* tab, unsigned int size, float *result)
{
    if(tab == NULL || result == NULL) return 0;
    unsigned int i;

    for(i=0; i<size; i++)
    {
        *result += *(tab+i);
    }
    *result = *result/i;

    return 1;
}
float T[100], suma = 0, srednia = 0;
    float *tab = T;
    int size = 0;
    unsigned int sizeS = 0;

avg(tab, sizeS, &srednia);
1

Wyzeruj wartość *result przed operacjami lub użyj tymczasowej zmiennej i na końcu przypisz jej wartość do *result.

0
Delor napisał(a):

Wyzeruj wartość *result przed operacjami lub użyj tymczasowej zmiennej i na końcu przypisz jej wartość do *result.
No faktycznie, teraz nie pokazuje tych testow ze sa zle, ale tak czy siak nie rozumiem, bo wczesniej bralo wszystkie wartosci, a teraz poprzez przepisanie *result do zmiennej dziala poprawnie, nie kumam czemu, ale dziekuje bardzo, teraz juz zawsze bede przypisywal do innych zmiennych. A z tym dzieleniem przez 0 to sukcesywnie bede zmienial, bo jeszcze inne bledy mam ktore musze poprawic

1
simonsoft napisał(a):

jeszcze sie nie spotkalem z debuggerem, ktory pokaze mi SIGSEGV

Bo w Windows ten błąd to najczęściej 0xC0000005: Access Violation

Tak pokazuje go Visual Studio

screenshot-20190520130735.png

Masz strzałeczką pokazane miejsce w programie, a w Autos możesz sprawdzić wartości, jeśli klikniesz przycisk Break.

A tak prezentuje to Qt - jakaś starsza wersja zapodziana na dysku:

screenshot-20190520131954.png

0

No po wielu testach roznych programow przysiadlem z QT i najbardziej mi odpowiada poki co, ale dzieki bardzo

0

Wczesniej wlasnie nie wyskakiwalo nic z tym bledem, zawsze klikam start debugging of startup project i sobie pokolei lece(> z kleszczem)
screenshot-20190520134830.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1