🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.programming
162 messages
162 total messages Page 4 of 4 Started by Robert Magdziarz Mon, 23 Aug 2021 12:59
Page 4 of 4 • 162 total messages
Re: rzadki bład w programie w C++
#217736
Author: heby
Date: Tue, 21 Sep 2021 10:07
9 lines
1697 bytes
On 21/09/2021 11:59, Robert Magdziarz wrote:
> Udało mi się znowu wygenerować kilka razy przypadek strs=="" z wiersza poleceń. Niestety program uruchomiony pod VSCode z debugowaniem (ten sam exec i te same argumenty i te same dane wejściowe) daje strs!="".
> Jak to wytłumaczyć?

Innymi śmieciami na stosie lub heapie.

Sprawdź, czy zmiana optymalizacji na różne kombinacje, nie ma na to wpływu.

Masz duża szansę na urwaną referencję wskazujacą w kosmos.
Re: rzadki bład w programie w C++
#217727
Author: heby
Date: Wed, 22 Sep 2021 10:53
6 lines
1737 bytes
On 22/09/2021 11:59, Robert Magdziarz wrote:
>>> teraz mam strs=="" i z wiersza poleceń i pod debugerem
>> I co jest na callstacku?
> Jak pisałem, pomyliłem się w poście: powinno być: teraz mam strs!="" i z wiersza poleceń i pod debugerem

Ok, ale to źle czy dobrze? A jak źle, to co jest na callstacku?
Re: rzadki bład w programie w C++
#217728
Author: Robert Magdziarz
Date: Wed, 22 Sep 2021 11:13
7 lines
2037 bytes
środa, 22 września 2021 o 12:53:07 UTC+2 heby napisał(a):
> On 22/09/2021 11:59, Robert Magdziarz wrote: 
> >>> teraz mam strs=="" i z wiersza poleceń i pod debugerem 
> >> I co jest na callstacku? 
> > Jak pisałem, pomyliłem się w poście: powinno być: teraz mam strs!="" i z wiersza poleceń i pod debugerem
> Ok, ale to źle czy dobrze? A jak źle, to co jest na callstacku?
To jest dobrze, tzn. nie jest to przypadek błędnego działania, znowu nie mogę go wygenerować
Re: rzadki bład w programie w C++
#217729
Author: Maciek Godek
Date: Wed, 22 Sep 2021 14:03
16 lines
3153 bytes
środa, 22 września 2021 o 13:13:54 UTC+2 Robert Magdziarz napisał(a):
> środa, 22 września 2021 o 12:53:07 UTC+2 heby napisał(a): 
> > On 22/09/2021 11:59, Robert Magdziarz wrote: 
> > >>> teraz mam strs=="" i z wiersza poleceń i pod debugerem 
> > >> I co jest na callstacku? 
> > > Jak pisałem, pomyliłem się w poście: powinno być: teraz mam strs!="" i z wiersza poleceń i pod debugerem 
> > Ok, ale to źle czy dobrze? A jak źle, to co jest na callstacku?
> To jest dobrze, tzn. nie jest to przypadek błędnego działania, znowu nie mogę go wygenerować

Mnie się zdaje, że debugger będzie tutaj o tyle mało pomocny, że o ile w niektórych sytuacjach można np. założyć pułapkę na zapis pod konkretny adres, o tyle tutaj pewnie wszystko się odbywa w pamięci dynamicznej.

Nie wiem, czy są jakieś wizualizatory zawartości pamięci, ale nawet jeśli tak, to nie spodziewałbym się, żeby dało się z nich coś łatwo wywnioskować.

Raczej bym się opierał na logach: sprawdzałbym (szeroko pojętą) spójność danych przed i po wywołaniach funkcji bibliotecznych, i jeżeli udałoby mi się zalogować w którymś miejscu coś podejrzanego, to dopiero wtedy spróbowałbym pracy krokowej.

(Najbardziej komfortowe warunki pracy w takich okolicznościach to oczywiście taka sytuacja, kiedy błąd zawsze daje się odtwarzać. Dla prostych programów można by było po prostu zrzucać ramkę stosu, ale nie wiem, na ile dobrze współczesne debuggery radzą sobie z zawartością sterty)
Re: rzadki bład w programie w C++
#217730
Author: Robert Magdziarz
Date: Wed, 22 Sep 2021 15:35
5 lines
2174 bytes
środa, 22 września 2021 o 16:03:23 UTC+2 Maciek Godek napisał(a):
> Mnie się zdaje, że debugger będzie tutaj o tyle mało pomocny, że o ile w niektórych sytuacjach można np. założyć pułapkę na zapis pod konkretny adres, o tyle tutaj pewnie wszystko się odbywa w pamięci dynamicznej. 

próbuje debugować, żeby sprawdzić co się dzieje w moim algorytmie nie tak, że na koniec strs=="" a nie strs!=""
moim zdaniem to droga do znalezienia błędu
Re: rzadki bład w programie w C++
#217731
Author: Robert Magdziarz
Date: Wed, 22 Sep 2021 17:24
1 lines
2124 bytes
Mam pytanie: czy zaobserwowany przeze mnie niedeterminizm błędu (tzn. raz występuje raz nie - przy tych samych argumentach i danych wejściowych) może wynikać z błędu logicznego w algorytmie? (przypomnę że w moim algorytmie nie używam generatora liczb pseudolosowych, dostępu do sieci ani systemu plików - poza danymi wejściowymi).
Re: rzadki bład w programie w C++
#217735
Author: heby
Date: Wed, 22 Sep 2021 17:35
21 lines
2467 bytes
On 22/09/2021 19:24, Robert Magdziarz wrote:
> Mam pytanie: czy zaobserwowany przeze mnie niedeterminizm błędu (tzn. raz występuje raz nie - przy tych samych argumentach i danych wejściowych) może wynikać z błędu logicznego w algorytmie?

Z błędu logicznego mógłby wynikać, gdyby algortym zawierał rand().

W innym przypadku *raczej* z błedu implementacji.

Masz gdzieś odczyt niezainicjowanych lub zwolninych wartości. Oczywiście 
nie mam pewności, ale przeczucie.

A kompilator nie marudzi, że użyte konstrukcje są niebezpieczne?

Zainteresuj się:

https://elinux.org/Electric_Fence
https://duma.sourceforge.io/
https://en.wikipedia.org/wiki/AddressSanitizer

Użyj clanga i zobacz czy on się inaczej zachowuje.

Przetestuj wszystkie poziomy -O, wliczając w to -Os.
Re: rzadki bład w programie w C++
#217732
Author: Maciek Godek
Date: Wed, 22 Sep 2021 21:22
6 lines
2921 bytes
środa, 22 września 2021 o 19:24:23 UTC+2 Robert Magdziarz napisał(a):
> Mam pytanie: czy zaobserwowany przeze mnie niedeterminizm błędu (tzn. raz występuje raz nie - przy tych samych argumentach i danych wejściowych) może wynikać z błędu logicznego w algorytmie? (przypomnę że w moim algorytmie nie używam generatora liczb pseudolosowych, dostępu do sieci ani systemu plików - poza danymi wejściowymi).

Ciężko powiedzieć, jeżeli nie widziało się kodu, ale jeżeli wypróbowałeś wszystkie dotychczasowe sugestie, i to nie pomogło, to bym się spodziewał, że problem leży w jakiejś zewnętrznej bibliotece, która może się różnie zachowywać w różnych okolicznościach.

Wydaje mi się, że rozsądnie byłoby naszpikować wszystkie odwołania do zewnętrznych bibliotek asercjami, wyrażającymi różne oczekiwane własności danych wejściowych i wyjściowych (tylko bym zrobił tak, żeby asercja nie wywalała programu, tylko na przykład logowała, że coś jest nie tak, albo ustawiała breakpoint w debuggerze)
Re: rzadki bład w programie w C++
#217733
Author: Robert Magdziarz
Date: Fri, 01 Oct 2021 04:24
4 lines
2671 bytes
środa, 22 września 2021 o 23:22:27 UTC+2 Maciek Godek napisał(a):
> Ciężko powiedzieć, jeżeli nie widziało się kodu
Moim zdaniem algorytm który nie zawiera niedeterministycznych konstrukcji (takich jak random()) zachowuje się jak funkcja matematyczna, która dla argumentu (danych wejściowych) zwraca zawsze tą samą wartość (dane wyjściowe). Więc mój program powinien zwracać zawsze tą samą wartość. Skoro tak nie jest to musi być błąd dostępu do losowej (niezainicjowanej) pamięci, błąd logiczny algorytmu nie owocowałby różnymi wartościami wynikowymi. Takie jest moje rozumowanie.
BTW: po polsku jest "trudno powiedzieć", "ciężko powiedzieć" to rusycyzm ("tiażeło skazat' "), rozpowszechniony niestety.
Re: rzadki bład w programie w C++
#217734
Author: Maciek Godek
Date: Fri, 01 Oct 2021 07:52
12 lines
2519 bytes
piątek, 1 października 2021 o 06:24:36 UTC+2 Robert Magdziarz napisał(a):

> BTW: po polsku jest "trudno powiedzieć"

"ciężko powiedzieć" też jest po polsku

> "ciężko powiedzieć" to rusycyzm ("tiażeło skazat' "), rozpowszechniony niestety.

o proszę, a tutaj ktoś twierdzi, że germanizm:
https://sjp.pwn.pl/poradnia/haslo/ciezko-powiedziec;5723.html

a może po prostu jest tak, że wiele języków odnosi się do tej samej - zakotwiczonej w podobnym doświadczeniu kulturowym - metafory pojęciowej [por. Lakoff i Johnson, "Metafory w naszym życiu"], według której "trud = ciężar"?
Re:rzadki bład w programie w C++
#217737
Author: slawek
Date: Sun, 17 Oct 2021 16:35
30 lines
2090 bytes
Robert Magdziarz <robert.magdziarz.1972@gmail.com> Wrote in message:
> Napisałem program w C++. Zawiera błąd którego szczegółów nie znam. Błąd (niepoprawne wartości zapisywane do pliku) występuje rzadko, nie wiem w jakich okolicznościach. Wstawiłem asercje i testuję, niestety nie udało mi się odtworzyć problemu.Jak podejść do problemu, jakiej strategii użyć? Co mogę zrobić poza asercjami? Debugowanie nie ma sensu bo błąd występuje zbyt rzadko.


Są trzy możliwości:

1. twój błąd, tj. coś gdzieś źle masz w kodzie źródłowym (99%)
2. błąd kompilatora, rzadkie ale możliwe (0.01%);
3. problem z hardware (0.99%).

Sprawdź na innym komputerze. Użyj innego kompulatora. Zostaje 99%.

Drastyczne rozwiązanie - przepisz na Javę lub C#. Może nie pomoże,
 ale pozbędziesz się problemów z tańcem po wskaźnikach, nadpisania
 mi pamięci itp.

Sprawdź czy stos nie jest za mały. 

Spróbuj zrzucić do logów jakie funkcje były wywoływane od chwili
 uruchomienia do detekcji błędu: błąd jest w tym co było
 używane.

Usuń (tymczasowo) połowę programu - dowiesz się która połowa ma
 błąd (jeżeli jest tylko jeden).

Valgrind itp. mogą pomóc.


----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Page 4 of 4 • 162 total messages
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