Thread View: pl.comp.programming
162 messages
162 total messages
Page 1 of 4
Started by Robert Magdziarz
Mon, 23 Aug 2021 12:59
Page 1 of 4 • 162 total messages
rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Mon, 23 Aug 2021 12:59
Date: Mon, 23 Aug 2021 12:59
2 lines
1571 bytes
1571 bytes
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.
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Mon, 23 Aug 2021 13:44
Date: Mon, 23 Aug 2021 13:44
27 lines
3232 bytes
3232 bytes
poniedziałek, 23 sierpnia 2021 o 14:59:04 UTC+2 robert.mag...@gmail.com napisał(a):
> 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.
Strategia, która pozwoli w najprostszy sposób wyeliminować ten "błąd", to uznać go za ficzer.
A tak serio, jeżeli Twoja wiedza o tym błędzie jest tak duża, jak wiedza, którą się tu podzieliłeś, odnośnie programu, który napisałeś, to nie widzę wielkich nadziei na uporanie się z nim.
Możesz chociaż napisać:
- w jaki sposób błąd się objawia
- jak duży jest program
- na jakim etapie rozwoju programu pojawił się błąd
- czy możesz łatwo przepisać program np. na C# albo Javę
Możesz też poszukać w okolicy jakiegoś kolegi-programisty, usiąść z nim i wspólnie przejrzeć kod.
Rzecz w tym, że jak piszesz w C++ albo C, to możesz łatwo popełnić błąd w rodzaju przypadkowego nadpisania obszaru w pamięci, i tego rodzaju błędy są raczej trudne do wykrycia.
Jeden z moich ulubionych to kod w rodzaju takiego czegoś:
printf("liczba wynosi: "+n);
Programista wychowany na C# będzie zaskoczony tym zachowaniem, a tymczasem to jest w pełni legalny kod w C: do adresu literału znakowego (który sam w sobie jest dość losowy) dodajemy jakąś liczbę, która w rezultacie daje nam jakiś inny adres, i spod tego adresu próbujemy teraz przekazać argument do funkcji printf.
Rezultatem jest "nieokreślone zachowanie", czyli może się tak naprawdę zdarzyć cokolwiek.
Czasem pomaga kompilacja kodu z flagami -Wall albo -Wextra - może pomoże wskazać miejsce w kodzie, w którym jest jakieś podejrzane użycie języka.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Mon, 23 Aug 2021 14:04
Date: Mon, 23 Aug 2021 14:04
16 lines
2987 bytes
2987 bytes
poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > Strategia, która pozwoli w najprostszy sposób wyeliminować ten "błąd", to uznać go za ficzer. mogę nie zapisywać do pliku cache.xml nic gdy strs="", tzn wtedy nie cache'ować > Możesz chociaż napisać: > - w jaki sposób błąd się objawia w pliku cache.xml mam atrybut strs="" a powinien być niepusty string > - jak duży jest program ok. 7 tys wierszy > - na jakim etapie rozwoju programu pojawił się błąd w trakcie testowania dokonywałem poprawek w kodzie w miarę jak znajdywałem błędy, poprawki mogły coś popsuć > - czy możesz łatwo przepisać program np. na C# albo Javę nie mogę bo program używa Qt5, ponadto potrzebuję binarkę dla Windows i Linuxa > Możesz też poszukać w okolicy jakiegoś kolegi-programisty, usiąść z nim i wspólnie przejrzeć kod. to byłby dobry pomysł gdyby nie to że teraz nie jestem zatrudniony, pracuję nad programem w domu; algorytmy są na tyle skomplikowane że zrozumienie programu przez drugą osobę wymagałoby dużego zaangażowania, dużo czasu; całego kodu źródłowego nieznajomym wysyłać nie chcę > Czasem pomaga kompilacja kodu z flagami -Wall albo -Wextra - może pomoże wskazać miejsce w kodzie, w którym jest jakieś podejrzane użycie języka. dzięki, spróbuję; czy polecasz jakieś inne narzędzia? (nie jestem zaawansowany w C++, na co dzień programuję w PHP).
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Mon, 23 Aug 2021 14:48
Date: Mon, 23 Aug 2021 14:48
31 lines
3628 bytes
3628 bytes
poniedziałek, 23 sierpnia 2021 o 16:04:12 UTC+2 robert.mag...@gmail.com napisał(a): > poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > w pliku cache.xml mam atrybut strs="" a powinien być niepusty string No dobra, to już jest coś. A teraz kilka pytań bardziej konkretnych: w jaki sposób i w jakich okolicznościach tworzysz plik cache.xml? W jaki sposób atrybut "strs" jest reprezentowany w pamięci podczas działania programu? Czy ten atrybut ma w pliku xml tylko jedną instancję, czy może jest wiele obiektów posiadających taki atrybut? Jakich operacji dokonujesz na obiekcie, który ma zostać zapisany do tego atrybutu? I czy to jest jedyny problem, jaki udało Ci się zaobserwować, czy może jest ich więcej? > > - jak duży jest program > ok. 7 tys wierszy > > - na jakim etapie rozwoju programu pojawił się błąd > w trakcie testowania dokonywałem poprawek w kodzie w miarę jak znajdywałem błędy, poprawki mogły coś popsuć Używasz systemu kontroli wersji (np. git) do rozwijania programu? > > - czy możesz łatwo przepisać program np. na C# albo Javę > nie mogę bo program używa Qt5, ponadto potrzebuję binarkę dla Windows i Linuxa Tutaj akurat Java dałaby radę, ale 7 tysięcy linii kodu to już faktycznie trochę jest. > > Możesz też poszukać w okolicy jakiegoś kolegi-programisty, usiąść z nim i wspólnie przejrzeć kod. > to byłby dobry pomysł gdyby nie to że teraz nie jestem zatrudniony, pracuję nad programem w domu; algorytmy są na tyle skomplikowane że zrozumienie programu przez drugą osobę wymagałoby dużego zaangażowania, dużo czasu; całego kodu źródłowego nieznajomym wysyłać nie chcę > > Czasem pomaga kompilacja kodu z flagami -Wall albo -Wextra - może pomoże wskazać miejsce w kodzie, w którym jest jakieś podejrzane użycie języka. > dzięki, spróbuję; czy polecasz jakieś inne narzędzia? (nie jestem zaawansowany w C++, na co dzień programuję w PHP). Możesz spróbować skompilować dwoma kompilatorami (np. clang i gcc) i zobaczyć, czy któryś z nich da jakiś dodatkowy komunikat. Poza tym istnieją różne narzędzia do statycznej analizy, ale często są płatne i wcale nie ma pewności, czy pomogą.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Mon, 23 Aug 2021 18:57
Date: Mon, 23 Aug 2021 18:57
45 lines
4812 bytes
4812 bytes
poniedziałek, 23 sierpnia 2021 o 16:48:49 UTC+2 Maciek Godek napisał(a): > poniedziałek, 23 sierpnia 2021 o 16:04:12 UTC+2 robert.mag...@gmail.com napisał(a): > > poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > > > w pliku cache.xml mam atrybut strs="" a powinien być niepusty string > No dobra, to już jest coś. > A teraz kilka pytań bardziej konkretnych: w jaki sposób i w jakich okolicznościach tworzysz plik cache.xml? Pod koniec działania programu. Wykorzystuję bibliotkę pugixml (i xml_document). Mam z nią problemy, musiałem użyć atrybutu, bo zapisywanie w treści węzła nie działało mi. > W jaki sposób atrybut "strs" jest reprezentowany w pamięci podczas działania programu? vector<string>, robię strs = implode(magic_str, vector<string>) moje vector<string> to drugie składowe unordered_map<wstring, vector<string>> > Czy ten atrybut ma w pliku xml tylko jedną instancję, czy może jest wiele obiektów posiadających taki atrybut? wiele > Jakich operacji dokonujesz na obiekcie, który ma zostać zapisany do tego atrybutu? push_back(), find(), iteracja z begin() i end() > I czy to jest jedyny problem, jaki udało Ci się zaobserwować, czy może jest ich więcej? to chyba ostatni błąd, wcześniejsze naprawiłem, nowych nie dostrzegam miałem problemy z regexami, używam skomplikowanych regexów dla długich tekstów, miewałem core dumped, poradziłem sobie wprowadzając ograniczenie na długość tekstu (linia w wejściowym pliku tekstowym) w programie używam sterty na której allokuje obiekty STL i nie mam 100% pewności czy nie naknociłem, z new/delete > > > - jak duży jest program > > ok. 7 tys wierszy > > > - na jakim etapie rozwoju programu pojawił się błąd > > w trakcie testowania dokonywałem poprawek w kodzie w miarę jak znajdywałem błędy, poprawki mogły coś popsuć > Używasz systemu kontroli wersji (np. git) do rozwijania programu? nie > > > - czy możesz łatwo przepisać program np. na C# albo Javę > > nie mogę bo program używa Qt5, ponadto potrzebuję binarkę dla Windows i Linuxa > Tutaj akurat Java dałaby radę, ale 7 tysięcy linii kodu to już faktycznie trochę jest. > > > Możesz też poszukać w okolicy jakiegoś kolegi-programisty, usiąść z nim i wspólnie przejrzeć kod. > > to byłby dobry pomysł gdyby nie to że teraz nie jestem zatrudniony, pracuję nad programem w domu; algorytmy są na tyle skomplikowane że zrozumienie programu przez drugą osobę wymagałoby dużego zaangażowania, dużo czasu; całego kodu źródłowego nieznajomym wysyłać nie chcę > > > Czasem pomaga kompilacja kodu z flagami -Wall albo -Wextra - może pomoże wskazać miejsce w kodzie, w którym jest jakieś podejrzane użycie języka. > > dzięki, spróbuję; czy polecasz jakieś inne narzędzia? (nie jestem zaawansowany w C++, na co dzień programuję w PHP). > Możesz spróbować skompilować dwoma kompilatorami (np. clang i gcc) i zobaczyć, czy któryś z nich da jakiś dodatkowy komunikat. Poza tym istnieją różne narzędzia do statycznej analizy, ale często są płatne i wcale nie ma pewności, czy pomogą.
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Tue, 24 Aug 2021 08:12
Date: Tue, 24 Aug 2021 08:12
22 lines
2804 bytes
2804 bytes
poniedziałek, 23 sierpnia 2021 o 20:57:59 UTC+2 robert.mag...@gmail.com napisał(a): > poniedziałek, 23 sierpnia 2021 o 16:48:49 UTC+2 Maciek Godek napisał(a): > > poniedziałek, 23 sierpnia 2021 o 16:04:12 UTC+2 robert.mag...@gmail.com napisał(a): > > > poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > > > > > w pliku cache.xml mam atrybut strs="" a powinien być niepusty string > > No dobra, to już jest coś. > > A teraz kilka pytań bardziej konkretnych: w jaki sposób i w jakich okolicznościach tworzysz plik cache.xml? > Pod koniec działania programu. Wykorzystuję bibliotkę pugixml (i xml_document). Mam z nią problemy, musiałem użyć atrybutu, bo zapisywanie w treści węzła nie działało mi. > > W jaki sposób atrybut "strs" jest reprezentowany w pamięci podczas działania programu? > vector<string>, robię strs = implode(magic_str, vector<string>) Skąd jest ta funkcja "implode"? > moje vector<string> to drugie składowe unordered_map<wstring, vector<string>> Zacząłbym od tego, że w momencie zapisywania pliku cache.xml tworzyłbym również plik z logami (może być nawet zapis na stderr, który byłby zrzucany do jakiegoś pliku) i wówczas, jeżeli bym zobaczył, że plik jest zepsuty, to bym sobie dogłębnie te logi przeanalizował. > > Używasz systemu kontroli wersji (np. git) do rozwijania programu? > nie To zacznij. Najlepiej już dziś.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Tue, 24 Aug 2021 08:57
Date: Tue, 24 Aug 2021 08:57
23 lines
3313 bytes
3313 bytes
wtorek, 24 sierpnia 2021 o 10:12:13 UTC+2 Maciek Godek napisał(a): > poniedziałek, 23 sierpnia 2021 o 20:57:59 UTC+2 robert.mag...@gmail.com napisał(a): > > poniedziałek, 23 sierpnia 2021 o 16:48:49 UTC+2 Maciek Godek napisał(a): > > > poniedziałek, 23 sierpnia 2021 o 16:04:12 UTC+2 robert.mag...@gmail.com napisał(a): > > > > poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > > > > > > > w pliku cache.xml mam atrybut strs="" a powinien być niepusty string > > > No dobra, to już jest coś. > > > A teraz kilka pytań bardziej konkretnych: w jaki sposób i w jakich okolicznościach tworzysz plik cache.xml? > > Pod koniec działania programu. Wykorzystuję bibliotkę pugixml (i xml_document). Mam z nią problemy, musiałem użyć atrybutu, bo zapisywanie w treści węzła nie działało mi. > > > W jaki sposób atrybut "strs" jest reprezentowany w pamięci podczas działania programu? > > vector<string>, robię strs = implode(magic_str, vector<string>) > Skąd jest ta funkcja "implode"? to moja funkcja a la PHP - łączy stringi z kolekcji przedzielone pierwszym parametrem w jeden string > > moje vector<string> to drugie składowe unordered_map<wstring, vector<string>> > Zacząłbym od tego, że w momencie zapisywania pliku cache.xml tworzyłbym również plik z logami (może być nawet zapis na stderr, który byłby zrzucany do jakiegoś pliku) i wówczas, jeżeli bym zobaczył, że plik jest zepsuty, to bym sobie dogłębnie te logi przeanalizował. > > > Używasz systemu kontroli wersji (np. git) do rozwijania programu? > > nie > To zacznij. Najlepiej już dziś. na razie czytam książkę o git-cie
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Tue, 24 Aug 2021 09:19
Date: Tue, 24 Aug 2021 09:19
20 lines
2059 bytes
2059 bytes
2021-08-24 o 01:57 -0700, Robert Magdziarz napisał: > na razie czytam książkę o git-cie Sztuka dla sztuki. Więcej czasu spędzisz na głowieniu się co wklepać żeby zadowolić gita niż na pisaniu kodu. Proponuję zainteresować się klasycznym svn-em, w codziennym użyciu ogarniesz go czterema poleceniami: svn up (zaciągnij najświeższy kod projektu) svn diff (porównaj mój lokalny kod z ostatnim commitem) svn st (zobacz które pliki lokalne są inne od tych w repo) svn commit (zapisz moje zmiany) Nie mówię przy tym, że git jest zły - jest po prostu bardziej skomplikowany, zarówno w swojej koncepcji jak i użytkowaniu. Pozwala też na więcej, ale w moim doświadczeniu to "więcej" jest zupełnie nieprzydatne i tylko wprowadza zamieszanie, przynajmniej przy kilkuosobowych projektach. Mateusz
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Tue, 24 Aug 2021 14:33
Date: Tue, 24 Aug 2021 14:33
38 lines
4571 bytes
4571 bytes
wtorek, 24 sierpnia 2021 o 10:57:42 UTC+2 robert.mag...@gmail.com napisał(a): > wtorek, 24 sierpnia 2021 o 10:12:13 UTC+2 Maciek Godek napisał(a): > > poniedziałek, 23 sierpnia 2021 o 20:57:59 UTC+2 robert.mag...@gmail.com napisał(a): > > > poniedziałek, 23 sierpnia 2021 o 16:48:49 UTC+2 Maciek Godek napisał(a): > > > > poniedziałek, 23 sierpnia 2021 o 16:04:12 UTC+2 robert.mag...@gmail.com napisał(a): > > > > > poniedziałek, 23 sierpnia 2021 o 15:44:35 UTC+2 Maciek Godek napisał(a): > > > > > > > > > w pliku cache.xml mam atrybut strs="" a powinien być niepusty string > > > > No dobra, to już jest coś. > > > > A teraz kilka pytań bardziej konkretnych: w jaki sposób i w jakich okolicznościach tworzysz plik cache.xml? > > > Pod koniec działania programu. Wykorzystuję bibliotkę pugixml (i xml_document). Mam z nią problemy, musiałem użyć atrybutu, bo zapisywanie w treści węzła nie działało mi. > > > > W jaki sposób atrybut "strs" jest reprezentowany w pamięci podczas działania programu? > > > vector<string>, robię strs = implode(magic_str, vector<string>) > > Skąd jest ta funkcja "implode"? > to moja funkcja a la PHP - łączy stringi z kolekcji przedzielone pierwszym parametrem w jeden string Tzn. się domyślam do czego służy. Raczej bym chciał zobaczyć definicję, żeby stwierdzić, czy nie ma w niej jakiegoś nieoczywistego błędu (skoro to nie jest funkcja z biblioteki standardowej) Ewentualnie możesz spróbować ją zamienić na biblioteczną, np. z boost: https://stackoverflow.com/questions/5689003/how-to-implode-a-vector-of-strings-into-a-string-the-elegant-way (tak czy siak, lepiej w miarę możliwości korzystać z gotowców, niż pisać własne funkcje na rzeczy, dla których gotowce istnieją) > > > moje vector<string> to drugie składowe unordered_map<wstring, vector<string>> > > Zacząłbym od tego, że w momencie zapisywania pliku cache.xml tworzyłbym również plik z logami (może być nawet zapis na stderr, który byłby zrzucany do jakiegoś pliku) i wówczas, jeżeli bym zobaczył, że plik jest zepsuty, to bym sobie dogłębnie te logi przeanalizował. > > > > Używasz systemu kontroli wersji (np. git) do rozwijania programu? > > > nie > > To zacznij. Najlepiej już dziś. > na razie czytam książkę o git-cie W najprostszym razie piszesz po prostu "git init" w folderze, który chcesz wersjonować, i później "git commit zmodyfikowane_pliki..." po każdej istotnej zmianie. Ale najlepiej założyć sobie konto na jakimś serwisie w rodzaju githuba albo gitlaba i tam trzymać cały kod (wtedy dochodzą jeszcze operacje "git push" i "git pull", żeby synchronizować ze sobą repozytoria) To jest o tyle spoko, że te serwisy od razu udostępniają narzędzia do wygodnego przeglądania zmian.
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Tue, 24 Aug 2021 14:39
Date: Tue, 24 Aug 2021 14:39
28 lines
3053 bytes
3053 bytes
wtorek, 24 sierpnia 2021 o 11:19:51 UTC+2 Mateusz Viste napisał(a): > 2021-08-24 o 01:57 -0700, Robert Magdziarz napisał: > > na razie czytam książkę o git-cie > Sztuka dla sztuki. Więcej czasu spędzisz na głowieniu się co > wklepać żeby zadowolić gita niż na pisaniu kodu. Proponuję > zainteresować się klasycznym svn-em, w codziennym użyciu ogarniesz go > czterema poleceniami: > > svn up (zaciągnij najświeższy kod projektu) > svn diff (porównaj mój lokalny kod z ostatnim commitem) > svn st (zobacz które pliki lokalne są inne od tych w repo) > svn commit (zapisz moje zmiany) > > Nie mówię przy tym, że git jest zły - jest po prostu bardziej > skomplikowany, zarówno w swojej koncepcji jak i użytkowaniu. Pozwala > też na więcej, ale w moim doświadczeniu to "więcej" jest zupełnie > nieprzydatne i tylko wprowadza zamieszanie, przynajmniej przy > kilkuosobowych projektach. svn już raczej odchodzi do lamusa. podstawowy workflow gita nie jest bardziej skomplikowany. w jednoosobowym projekcie to zupełnie bez znaczenia, natomiast jeżeli projekt się rozrasta, svn staje się długiem technicznym, bo operacje scalania ze sobą zmian od różnych osób stają się niebotycznie skomplikowane. serio. nawet humaniści korzystają z gita przy kolaboracyjnym pisaniu książek. przy svnie taka współpraca byłaby mocno utrudniona.
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Tue, 24 Aug 2021 15:27
Date: Tue, 24 Aug 2021 15:27
36 lines
2926 bytes
2926 bytes
2021-08-24 o 07:39 -0700, Maciek Godek napisał: > svn już raczej odchodzi do lamusa. Efekt mody. > w jednoosobowym projekcie to zupełnie bez znaczenia, natomiast jeżeli > projekt się rozrasta, svn staje się długiem technicznym, bo operacje > scalania ze sobą zmian od różnych osób stają się niebotycznie > skomplikowane. > > serio. Uwierzyłbym, gdybym nie używał svn-a od ponad 15 lat - również zespołowo. Tych niebotycznych komplikacji, o których piszesz, nie doświadczyłem. Widziałem natomiast rozterki programistów dumających nad tym, jak ugryźć gita żeby się nie obraził - i spędzających godziny na doktoryzowaniu się i dyskutowaniu w nieskończoność o tym, jak coś zrobić... zamiast zająć się pożyteczną pracą. Niewątpliwie istnieją sytuacje, w których git wykazuje zalety względem svn - jakiś intensywny branching, możliwość pracy offline przy lokalnym commitowaniu, itp. Ja takich potrzeb w praktyce nie zaznałem. Dlatego uważam, ze w wielu przypadkach git jest zwyczajnie przekombinowany. Lubię proste i skuteczne narzędzia - a svn taki właśnie jest. > nawet humaniści korzystają z gita przy kolaboracyjnym pisaniu książek. > przy svnie taka współpraca byłaby mocno utrudniona. W jaki sposób korzystają, i w jaki sposób utrudniona? W moich zespołach zawsze trzymaliśmy wszelkie podręczniki i dokumentacje w svn, w postaci plików tex lub html na podstawie których następnie coś budowało wynikowego PDFa. I tutaj nie przypominam sobie by svn cokolwiek utrudniał. Mateusz
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Tue, 24 Aug 2021 15:50
Date: Tue, 24 Aug 2021 15:50
57 lines
4389 bytes
4389 bytes
wtorek, 24 sierpnia 2021 o 17:27:16 UTC+2 Mateusz Viste napisał(a): > 2021-08-24 o 07:39 -0700, Maciek Godek napisał: > > svn już raczej odchodzi do lamusa. > Efekt mody. W jakiejś mierze pewnie tak. Na pewno z mercurialem git "wygrał" ze względu na modę. > > w jednoosobowym projekcie to zupełnie bez znaczenia, natomiast jeżeli > > projekt się rozrasta, svn staje się długiem technicznym, bo operacje > > scalania ze sobą zmian od różnych osób stają się niebotycznie > > skomplikowane. > > > > serio. > Uwierzyłbym, gdybym nie używał svn-a od ponad 15 lat - również > zespołowo. Tych niebotycznych komplikacji, o których piszesz, nie > doświadczyłem. Widziałem natomiast rozterki programistów dumających nad > tym, jak ugryźć gita żeby się nie obraził - i spędzających godziny na > doktoryzowaniu się i dyskutowaniu w nieskończoność o tym, jak coś > zrobić... zamiast zająć się pożyteczną pracą. > Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. > Niewątpliwie istnieją sytuacje, w których git wykazuje zalety względem > svn - jakiś intensywny branching, możliwość pracy offline przy > lokalnym commitowaniu, itp. Dokładnie. Sam pomysł, że musisz mieć centralne repozytorium, jest sporym utrudnieniem. Dlatego np. github ma guzik, którym możesz łatwo zforkować repozytorium i później wysyłać pull-requesty do oryginalnego repozytorium; albo nie wysyłać. Ja takich potrzeb w praktyce nie zaznałem. > Dlatego uważam, ze w wielu przypadkach git jest zwyczajnie > przekombinowany. Lubię proste i skuteczne narzędzia - a svn taki > właśnie jest. Właściwie to jest na odwrót. Git jest dużo prostszym narzędziem. Już sam fakt, że wystarczy wpisać "git init", żeby mieć u siebie repozytorium, o tym świadczy. Dla SVNa musisz postawić serwer. > > nawet humaniści korzystają z gita przy kolaboracyjnym pisaniu książek. > > przy svnie taka współpraca byłaby mocno utrudniona. > W jaki sposób korzystają, i w jaki sposób utrudniona? Na przykład w taki: https://github.com/OpenLogicProject/OpenLogic A utrudniona, bo przy zbiorowej kolaboracji synchronizacja repozytoriów a'la SVN byłaby koszmarem. Na przykład github jądra Linuxa wyświetla 5000 współautorów. > W moich zespołach > zawsze trzymaliśmy wszelkie podręczniki i dokumentacje w svn, w postaci > plików tex lub html na podstawie których następnie coś budowało > wynikowego PDFa. I tutaj nie przypominam sobie by svn cokolwiek > utrudniał. A ile osób te zespoły liczyły?
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Tue, 24 Aug 2021 17:41
Date: Tue, 24 Aug 2021 17:41
53 lines
3947 bytes
3947 bytes
2021-08-24 o 08:50 -0700, Maciek Godek napisał: > Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. Branch to nic innego, jak kopiowania - trwa szybko. Powolny natomiast bywa zaiste merge, dużo zależy od rozmiarów kodu i ilości różnic w sklejanych wersjach, przy czym w ostatnich latach svn zrobił na tym polu duże postępy. > Dokładnie. Sam pomysł, że musisz mieć centralne repozytorium, jest > sporym utrudnieniem. Mi to się właśnie bardzo podoba i raczej postrzegam tę całą "decentralizację" gita jako utrudnienie. Ktoś naćka milion zmian w git przez noc, to rano muszę wszystko kolejno zaciągać (i nie daj losie by były tam jakieś większe pliki binarne). Przy svn zaciągam tylko najświeższą, ostatnią wersję. > Dlatego np. github ma guzik, którym możesz łatwo > zforkować repozytorium i później wysyłać pull-requesty do > oryginalnego repozytorium; albo nie wysyłać. Guzik w interfejsie webowym to dla mnie żaden argument. Taki sam guzik mógłby przecież być przy svn - robiłby "svn import", a ew. pull requesty byłyby niczym innym jak przesłaniem patcha wyciągniętego z svn diff. > Git jest dużo prostszym narzędziem. Już sam fakt, że wystarczy wpisać > "git init", żeby mieć u siebie repozytorium, o tym świadczy. Dla SVNa > musisz postawić serwer. Z założenia chodziło o kolaborację, w tym kontekście serwer wydaje się dość rozsądnym rozwiązaniem. Ale jeśli nie chcesz to nie musisz - svn równie dobrze może przecież pracować na lokalnym katalogu. > A utrudniona, bo przy zbiorowej kolaboracji synchronizacja > repozytoriów a'la SVN byłaby koszmarem. Na przykład github jądra > Linuxa wyświetla 5000 współautorów. Tak, to jest jeden z racjonalnych use-casów gita. Zresztą git powstał właśnie do tego by usprawnić prace nad kernelem. Projekt, który ma 5000 współautorów to jednak nie jest norma i może wymagać specjalistycznego podejścia. Równie dobrze (uwaga, samochodowa analogia! proszę o tolerancję) mógłbym stwierdzić, że zamiast Tico kupię sobie ciągnik siodłowy, bo przecież kiedyś lodówka może mi się rozrosnąć i będę potrzebował zwieźć z warzywniaka 8 ton marchwi. > A ile osób te zespoły liczyły? Podawałem (chyba) wcześniej - od kilku do maks kilkunastu. Jeśli mowa o projektach z tysiącem programistów stukających 24/24, to spierać się nie będę - bo nie znam, i moja wypowiedź ich nie dotyczy. Mateusz
Re: rzadki bład w programie w C++
Author: heby
Date: Tue, 24 Aug 2021 19:40
Date: Tue, 24 Aug 2021 19:40
77 lines
5595 bytes
5595 bytes
On 24/08/2021 17:50, Maciek Godek wrote: > Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. U mnie trwa około 2 sekund. Repo takie sobie, około miliona plików źródłowych i ponad 30GB gołego mięska na trunku/tagu z którego robie brancha. Może faktycznie niewielkie to repo w porównaniu z typowym helloworldem z githuba. Ilośc danych jakie latają po sieci przy tej operacji jest mniejsza niż przy szukaniu obrazków z kotami po googlu. >> Niewątpliwie istnieją sytuacje, w których git wykazuje zalety względem >> svn - jakiś intensywny branching, możliwość pracy offline przy >> lokalnym commitowaniu, itp. > Dokładnie. Sam pomysł, że musisz mieć centralne repozytorium, jest sporym utrudnieniem. Jeśli masz zespół programistów na Antarktydzie na łaczach wdzwanianych TePeSA to zaleta gita z offlinowym repo jest zdecydowanie wyróżniająca go na tle tych normalnych potrzeb reszty ludzkości. > Właściwie to jest na odwrót. > Git jest dużo prostszym narzędziem. Już sam fakt, że wystarczy wpisać "git init", żeby mieć u siebie repozytorium, o tym świadczy. Nie, to tylko świadczy o tym, że jest nastawiony na inne zagadnienia niż praca zespołowa. Niektórzy uważają GITa za narzędzie dla schizofreników i spiskowców. Właśnie z tego powodu, jak nastawienie na pracę offline. W pracy zespołowej to kuriozum, że chowasz swoje wypociny przed innymi. A jak ktoś będzie musiał ją przejąć, bo umrzesz? A jak będziesz chciał ciągłą integrację na swoim branchu na centralnej farmie kompilującej? A jak kolega będzie chciał Ci pomóc? Zaleta? Serio? Gdzie? > Dla SVNa musisz postawić serwer. Brednia. Możesz stworzyć bazę danych SVN w *katalogu* na dysku lokalnym. JEDNO kliknięcie, w TortoiseSVN. Tylko nikt tak nie robi podczas pracy. To głupie. > A utrudniona, bo przy zbiorowej kolaboracji synchronizacja repozytoriów a'la SVN byłaby koszmarem. Dlatego każdy używający SVN nie jest do tego stopnia idiotą, aby mieć osobne, prywatne repozytoria. Ludzie miewają szybki internet. Szybszy niż w latach 90. Centralne repo nie jest niczym dziwnym. Ba, działa absurdalnie szybko, przy tym moim, skromnym repo. > Na przykład github jądra Linuxa wyświetla 5000 współautorów. I to oznacza że masz 5000 lokalnych repozytoriów? Czyli, mówiąc prościej, rozrzuciłeś problemy synchronizacji na 5000 osób i wszyscy udają że już go nie ma? Na svn by go *naprawdę* nie było. Tak najzwyczajniej, w SVN nie ma problemu z synchronizacją. O ile potrafisz go używać. > A ile osób te zespoły liczyły? Ilość userów nijak nie zwiększa problemów pracy SVN. Rozmiar repo też. Powtarzasz jakieś zasłyszane i niezweryfikowane brednie. Swoją droga powtarzają je wszyscy gitowcy jacy przewineli się przez moje ręce, po bliższej analizie okazuje się że nie mieli pojęcia jak sie obsługuje SVN, robili to źle i marudzili, że nie działa lub wyczytali multum podobnych bredni z internetach. Nikt nie twierdzi, że git jest lepszy/gorszy, bo to narzedzie do innych zastosowań niż centralne repo na szybkich łaczach internetowych. Czyli 90% potrzeb i możliwości przeciętnej firmy w PL. Nie jestem zwolennikiem SVN, ale szlag mnie trafia kiedy słyszę takie brednie. SVN to zaskakująco stabilny i zacny kawał softu. To że jest chwilowa moda na gita o niczym nie świadczy. Na pewno nie o tym, że ma jakieś znaczące zalety w typowym flow w typowej firmie z centralnym repo. Jak narazie, typowi gitowiec pytany o prawdziwe zalety git vs svn zazwyczaj nie ma ani jednej która by nie wynikała z błednego uzycia svn. I mam wrażenie że nie bez powodu: nie ma tak naprawdę argumentów. To tylko moda i propaganda. Czekam na coś lepszego. Już ze 20 lat.
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 07:53
Date: Wed, 25 Aug 2021 07:53
68 lines
4630 bytes
4630 bytes
2021-08-24 o 21:40 +0200, heby napisał: > On 24/08/2021 17:50, Maciek Godek wrote: > > Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. > > U mnie trwa około 2 sekund. Bo tu oczywiście nie chodziło o branch, tylko o merge. :) Te bywają długawe - ale w żadnym wypadku nie określiłbym ich dziś jako "koszmar". We wczesnych wersjach subversion ten proces faktycznie był mało optymalny, ale mówię tu o pierwszej dekadzie wieku - od tego czasu subversion znacząco się pod tym kątem poprawiło. > Repo takie sobie, około miliona plików źródłowych i ponad 30GB > gołego mięska na trunku/tagu z którego robie Ładnie. Zerknąłem na swoje największe repo - ledwo 100 tys. plików w trunk, niecałe 7 GiB danych, 30 tys. rewizji, ok 12 lat pracy. W tym czasie liczba napotkanych problemów: zero. Dlatego rozbawiły mnie nieco te historie o "długu technologicznym". > Jeśli masz zespół programistów na Antarktydzie na łaczach > wdzwanianych TePeSA to zaleta gita z offlinowym repo jest > zdecydowanie wyróżniająca go na tle tych normalnych potrzeb reszty > ludzkości. Muszę tutaj zaoponować - w takiej sytuacji prędzej czy później antarktyczni programiści będą musieli te swoje wszystkie commity i tak przepchać tym swoim telegrafem, więc oszczędność w git jest żadna. A nawet wręcz przeciwnie, bo każdy z eskimosów będzie musiał synchronizować u siebie wszystkie możliwe wersje kolegów. svn jest tu daleko oszczędniejszy. Jakimś racjonalnym use casem dla git byłaby praca na Saturnie. Saturnianie pracują sobie spokojnie u siebie, a kiedy raz na jakiś czas otwiera się okienko komunikacji z ziemią, to przesyłają wszystko jednym rzutem do centrali (licząc, że koledzy z ziemi nie narobili w międzyczasie jakichś kolizji). > Dlatego każdy używający SVN nie jest do tego stopnia idiotą, aby mieć > osobne, prywatne repozytoria. Ludzie miewają szybki internet. Szybszy > niż w latach 90. Tu nawet nie potrzeba szybkiego internetu. Przez kilka lat pracowałem na łączu 64 Kbps, przesłanie kilku kilobajtów w ramach commita nie było żadnym problemem. Dłużej trwało odebranie emaila. > Na svn by go *naprawdę* nie było. Tak najzwyczajniej, w SVN nie ma > problemu z synchronizacją. O ile potrafisz go używać. "commit early, commit often". Niestety wielu ludzi ma z tym jakiś problem psychologiczny. Wstydliwość, czy nie wiem co. Może do nich właśnie przemawia to całe lokalne gitowanie... > > A ile osób te zespoły liczyły? > > Ilość userów nijak nie zwiększa problemów pracy SVN. Rozmiar repo też. Może zwiększać, przy patologicznej organizacji pracy (Janek i Zdziusiu pracują jednocześnie nad refaktoryzacją tej samej funkcji trunkowej). Ale fakt - to już temat poza gestią VCS-a. No i git tak czy inaczej w żaden sposób tu niczego nie ułatwia, a raczej wręcz utrudnia. > Nie jestem zwolennikiem SVN Z ciekawości - dlaczego? W sensie - jakie widzisz w nim mankamenty? Bo mi naprawdę trudno się do czegokolwiek przyczepić. Mateusz
Re: rzadki bład w programie w C++
Author: heby
Date: Wed, 25 Aug 2021 08:02
Date: Wed, 25 Aug 2021 08:02
58 lines
4477 bytes
4477 bytes
On 25/08/2021 09:53, Mateusz Viste wrote: >> On 24/08/2021 17:50, Maciek Godek wrote: >>> Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. >> U mnie trwa około 2 sekund. > Bo tu oczywiście nie chodziło o branch, tylko o merge. :) Super. Coś koło 4-5 sekund. > Te bywają długawe Tak, czaami nie zdążę siorpnąc herbatki. >> Repo takie sobie, około miliona plików źródłowych i ponad 30GB >> gołego mięska na trunku/tagu z którego robie > Ładnie. Zerknąłem na swoje największe repo - ledwo 100 tys. plików w > trunk, niecałe 7 GiB danych, 30 tys. rewizji, ok 12 lat pracy. W tym > czasie liczba napotkanych problemów: zero. Dlatego rozbawiły mnie nieco > te historie o "długu technologicznym". Ja wiem jakie problemy ma SVN, związane z realną pracą, ale w bajkoopowieściach gitowców niegdy one nie padają. Padają różne brednie. >> Jeśli masz zespół programistów na Antarktydzie na łaczach >> wdzwanianych TePeSA to zaleta gita z offlinowym repo jest >> zdecydowanie wyróżniająca go na tle tych normalnych potrzeb reszty >> ludzkości. > Muszę tutaj zaoponować - w takiej sytuacji prędzej czy później > antarktyczni programiści będą musieli te swoje wszystkie commity i tak > przepchać tym swoim telegrafem, więc oszczędność w git jest żadna. Oszczęsdnośc polega na tym, że pośrednich komitów nie pchasz w sieć. Przykładowo: odradzam używanie SVN w przypadku pracy z plikami binarnymi. >> Na svn by go *naprawdę* nie było. Tak najzwyczajniej, w SVN nie ma >> problemu z synchronizacją. O ile potrafisz go używać. > "commit early, commit often". Niestety wielu ludzi ma z tym jakiś > problem psychologiczny. Wstydliwość, czy nie wiem co. Może do nich > właśnie przemawia to całe lokalne gitowanie... Wypytuje zawsze dlaczego używaja gita. Odpowiedż w 80% wypadków taka sama: bo ma lokalne repo. Ale nikt nie potrafi uzasadnić po co mu to potrzebne. CHoć trafiają się argumenty antysocjalne i antyzespołowe (nikt nie patrzy w to co robie). >> Ilość userów nijak nie zwiększa problemów pracy SVN. Rozmiar repo też. > Może zwiększać, przy patologicznej organizacji pracy (Janek i Zdziusiu > pracują jednocześnie nad refaktoryzacją tej samej funkcji trunkowej). Jeśli 100 osób na raz zmieniło tą tamą linijkę to i Święty Git nie pomoże. >> Nie jestem zwolennikiem SVN > Z ciekawości - dlaczego? Z powodu kłopotów z backportowaniem poprawek. Nie jest to poprawnie ogarniane. Co prawda dzięki temu mam czysty styl pracy (brak merge do niższych rewizji wychodzi tylko na dobre) ale mimo to ludzie robią takie błędy i SVN nie ma nic co by tutaj pomagało.
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 08:34
Date: Wed, 25 Aug 2021 08:34
61 lines
4518 bytes
4518 bytes
2021-08-25 o 10:02 +0200, heby napisał: > On 25/08/2021 09:53, Mateusz Viste wrote: > >> On 24/08/2021 17:50, Maciek Godek wrote: > >>> Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. > >> U mnie trwa około 2 sekund. > > Bo tu oczywiście nie chodziło o branch, tylko o merge. :) > > Super. Coś koło 4-5 sekund. Dzisiaj, tak. Dlatego pisałem, że to żaden koszmar, choć jeśli kolega Maciek eksperymentował z svn w latach 200x, to mógł zaobserwować gorsze wyniki. Ale nie wiem czy faktycznie się na tym przejechał, czy po prostu tak przeczytał na jakimś forum i pomyślał że to fajny argument - wszak taki mechanizm jest mi również znany. > > Te bywają długawe > > Tak, czaami nie zdążę siorpnąc herbatki. Do herbatki to służy przecież kompilacja a nie merge. Sądziłem, że w naszej branży to oczywistość (ref: xkcd, "compiling!"). :-) > > Muszę tutaj zaoponować - w takiej sytuacji prędzej czy później > > antarktyczni programiści będą musieli te swoje wszystkie commity i > > tak przepchać tym swoim telegrafem, więc oszczędność w git jest > > żadna. > > Oszczęsdnośc polega na tym, że pośrednich komitów nie pchasz w sieć. Jak nie pcham, jak pcham. No chyba, że wcześniej skorzystam z zaklęć rebase/squash/itd, ew. jakieś amendowanie... ale to należałoby uściślić. I faktycznie - svn takich mechanizmów nie posiada. Bo i po co? Repozytorium to nie konkurs artystyczny. > Przykładowo: odradzam używanie SVN w przypadku pracy z plikami > binarnymi. Zdarza mi się (rzadko, ale jednak) trzymać pliki binarne w svn - czasem do kilku MiB. Działa. Jeśli ktoś zmieni ten plik 10 razy, to svn up zaciągnie mi tę ostatnią (najświeższą) wersję. Git natomiast będzie pchał 10x więcej danych. Nie widzę w czym git tutaj lepszy. Abstrahuję tu od dodatków typu LFS, bo to proteza której po prostu nie potrzeba w svn. > Z powodu kłopotów z backportowaniem poprawek. Nie jest to poprawnie > ogarniane. Co prawda dzięki temu mam czysty styl pracy (brak merge do > niższych rewizji wychodzi tylko na dobre) ale mimo to ludzie robią > takie błędy i SVN nie ma nic co by tutaj pomagało. A git ma? Pytam szczerze, bo nie wiem. Backporty mi się czasem zdarzają. Typowo: przeportowanie jakiejś istotnej poprawki z wersji 14.x do dawnej wersji 13.x sprzed roku. To, co proponuje w tym zakresie svn jest, jak dla mnie, zupełnie wystarczające. Oczywiście zdarzają się sytuacje, w których svn nie wie jak ogarnąć jakiś merge bo kod w międzyczasie uległ zbyt dużym zmianom. Ale to już klasa problemów, których wg. mnie nie powinna próbować rozwiązać maszyna. Jeśli przeklejenie kodu nie jest oczywiste to sprawę tak czy inaczej powinien rozpatrzyć człowiek i podpowiedzieć automatowi co z czym ma posklejać aby wynik miał szansę zadziałać (i tak dzieje się w svn). Mateusz
Re: rzadki bład w programie w C++
Author: heby
Date: Wed, 25 Aug 2021 09:03
Date: Wed, 25 Aug 2021 09:03
23 lines
2788 bytes
2788 bytes
On 25/08/2021 10:34, Mateusz Viste wrote: > zdarzają. Typowo: przeportowanie jakiejś istotnej poprawki z wersji > 14.x do dawnej wersji 13.x sprzed roku. Mówie o backportowaniu podczas flow na branchu. Przykład: 1) robie brancha z trunka 2) na trunku ktoś usuwa plik A i dodaje krytyczny ficzer 3) zaciągam do branch zmianę z 2) 4) ktoś rewertuje omyłkowo usunięty plik na trunku 5) ja merguje się z moim branchem do trunka 6) plik A znika To jest backport do brancha w celu ponownego zespawania brancha z trunkiem i to powoduje problemy. Co ciekawe, taki styl pracy jest *oficjalnie* sugerowany przez Stefana. Mimo, że powoduje rozjazdy i fałszywe konflikty. U mnie jest to zabronione. Zamiast backportu robie *nowy* branch z trunka i przenoszę zmiany ze starego, co usuwa *wszystkie* problemy z mergowaniem backportów, bo ich nie ma. I branch nie z trunka, tylko taga, ale to by było zbyt skomplikowane dla opisu... tak tylko dla purystów uwaga ;)
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Wed, 25 Aug 2021 09:20
Date: Wed, 25 Aug 2021 09:20
28 lines
4162 bytes
4162 bytes
środa, 25 sierpnia 2021 o 10:35:46 UTC+2 Mateusz Viste napisał(a): > 2021-08-25 o 10:02 +0200, heby napisał: > > On 25/08/2021 09:53, Mateusz Viste wrote: > > >> On 24/08/2021 17:50, Maciek Godek wrote: > > >>> Pamiętam, że kiedyś robiłem brancha na SVNie i to był koszmar. > > >> U mnie trwa około 2 sekund. > > > Bo tu oczywiście nie chodziło o branch, tylko o merge. :) > > > > Super. Coś koło 4-5 sekund. > Dzisiaj, tak. Dlatego pisałem, że to żaden koszmar, choć jeśli kolega > Maciek eksperymentował z svn w latach 200x, to mógł zaobserwować > gorsze wyniki. Ale nie wiem czy faktycznie się na tym przejechał, czy > po prostu tak przeczytał na jakimś forum i pomyślał że to fajny > argument - wszak taki mechanizm jest mi również znany. Ostatni raz korzystałem z SVN w okolicach 2012 roku, i wspominam robienie branchy i merge'ów jako koszmar. W gicie sporo innych rzeczy wspominam jako koszmar, ale bym powiedział, że tak jak SVN jest porządniej zaimplementowany i ma lepsze interfejsy, git jest lepiej koncepcyjnie pomyślany i bardziej skalowalny, ale implementacja i projekt interfejsu są raczej do bani. No i git rzeczywiście jest bardziej modny, co mimo wszystko ma jakieś tam znaczenie - np. jeżeli idzie o dostępność hostingu. Tak czy siak - jak Sobczak słusznie zauważył - dywagowanie o wyższości jednego systemu kontroli wersji nad drugim w wątku dotyczącym problemów w programie C++owym nie ma za dużo sensu. Śledzenie zmian w takim czy innym VCSie jest elementem higieny pracy programisty i może niekiedy pomóc wyłapać błędy, które się wprowadziło na jakimś etapie rozwoju projektu. Ja bym każdemu kto jeszcze nie ma swojej preferencji raczej polecał gita, i to właśnie ze względu na ową "modność" Swego czasu korzystałem z mercuriala z hostingiem na bitbuckecie, ale atlassian uznał, że nie będzie już wspierał mercurialowych repozytoriów, i zamiast je przekonwertować do gita (na co bez trudu można znaleźć gotowe skrypty), to mi je skasował (!)
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 09:21
Date: Wed, 25 Aug 2021 09:21
19 lines
2389 bytes
2389 bytes
2021-08-25 o 11:03 +0200, heby napisał: > Przykład: > > 1) robie brancha z trunka > 2) na trunku ktoś usuwa plik A i dodaje krytyczny ficzer > 3) zaciągam do branch zmianę z 2) > 4) ktoś rewertuje omyłkowo usunięty plik na trunku > 5) ja merguje się z moim branchem do trunka > 6) plik A znika Ach takie jaja. No to tego po prostu nie robimy. Jeśli ktoś robi branch, to pracuje na nim w izolacji aż do zespawania (lub porzucenia, bo to często dla potrzeb jakiegoś prototypowania). A jak mu się nie podoba, to niech branchuje na nowo. Czyli w efekcie wychodzi na to samo, co opisujesz. Wydaje mi się, że tak jest zdrowiej, no i przede wszystkim łatwiej się później człowiekowi (mi) połapać kto co dodał, dlaczego i w którym momencie. Mateusz
Re: rzadki bład w programie w C++
Author: heby
Date: Wed, 25 Aug 2021 09:31
Date: Wed, 25 Aug 2021 09:31
21 lines
3032 bytes
3032 bytes
On 25/08/2021 11:20, Maciek Godek wrote: > Ostatni raz korzystałem z SVN w okolicach 2012 roku, i wspominam robienie branchy i merge'ów jako koszmar. Korzystam z jednego i tego samego repo od ~2005 roku, od rewizji 0. Nigdy nie nazwałbym tego koszmarem. Szczególnie od czasu pojawienia się lokalnych dysków ssd, które problemy zredukowały do sekund. > Tak czy siak - jak Sobczak słusznie zauważył - dywagowanie o wyższości jednego systemu kontroli wersji nad drugim w wątku dotyczącym problemów w programie C++owym nie ma za dużo sensu. Sens ma w wyższej skali. Zachowania związane z VCS mają wpływ na flow pracy. Chciałbym np., aby ciągła intergracja ciągle puszczała mi unit testy, po każdym commicie w *branch*. Gitowiec się oburzy, bo przeciez to jego przejaświętszy branch, gdzie poza kodem trzyma też zdjecia kotów, liste zakupów w spożywczaku i kilka *.mp4 z przyrodniczymi, a ponadto on ma 7 poprawek na tym "branchu", bo co będzie tracił czas na 7 branchów. Innymi słowy: C++ może i wsio rawno, ale w przypadku wyższej warstwy, wpływ jest widoczny, na styl pracy.
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 09:55
Date: Wed, 25 Aug 2021 09:55
43 lines
3691 bytes
3691 bytes
2021-08-25 o 02:20 -0700, Maciek Godek napisał: > Ostatni raz korzystałem z SVN w okolicach 2012 roku, i wspominam > robienie branchy i merge'ów jako koszmar. Na świeżej (wówczas) wersji svn? Dziwne. Musiałbyś więcej szczegółów podać, albo powtórzyć doświadczenie i opisać. > git jest lepiej koncepcyjnie pomyślany Do bani z taką koncepcją, że każdy musi mieć na pececie swój własny "niby-serwer" i synchronizować wszystko w obie strony, przy tym chowając swoja zmiany przed światem tak długo, jak się da. No i te setki opcji, przełączników, trybów... > i bardziej skalowalny Nie będę się spierał, bo moje doświadczenie w adminowaniu svn-em jest ograniczone do kilkuosobowych projektów, ale niemniej wypadałoby to stwierdzenie jakoś uargumentować. Przez wiele lat z svn korzystały duże i bardzo duże projekty. Wnioskuję więc, że jednak da się. Jednym z ostatnich "dużych" projektów open-source, który wyemigrował z svn jest FreeBSD. Jeden z core programistów podaje przesłanki za tą zmianą: https://bsdimp.blogspot.com/2020/09/freebsd-subversion-to-git-migration.html W żadnym punkcie nie pada "gorsza skalowalność". Podane argumenty sprowadzają się do dwóch rzeczy: "bo wszyscy tak robią" i "git pozwala ładnie formatować patche, ułatwiając ich przyjmowanie z zewnątrz". > Tak czy siak - jak Sobczak słusznie zauważył - dywagowanie o > wyższości jednego systemu kontroli wersji nad drugim w wątku > dotyczącym problemów w programie C++owym nie ma za dużo sensu. Dyskusja to taki proces, że z czasem może zupełnie zmienić kierunek, w zależności od zainteresowań i woli jej uczestników. > Ja bym każdemu kto jeszcze nie ma swojej preferencji raczej polecał > gita, i to właśnie ze względu na ową "modność" Czyli już nie ze względu na "dług technologiczny", "niebotyczne komplikacje" i rzekomą "prostotę gita"? No ok, moda to też jakiś argument. Niekoniecznie zresztą zły. Mateusz
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Wed, 25 Aug 2021 10:09
Date: Wed, 25 Aug 2021 10:09
38 lines
3870 bytes
3870 bytes
środa, 25 sierpnia 2021 o 11:55:26 UTC+2 Mateusz Viste napisał(a): > 2021-08-25 o 02:20 -0700, Maciek Godek napisał: > > Ostatni raz korzystałem z SVN w okolicach 2012 roku, i wspominam > > robienie branchy i merge'ów jako koszmar. > Na świeżej (wówczas) wersji svn? Nie wiem. Pewne dość świeżej bo to stało na w miarę aktualnym Ubuntu. > Dziwne. Musiałbyś więcej szczegółów podać, albo powtórzyć doświadczenie i opisać. Pewnie tak, ale na to raczej nie ma szans :D > > git jest lepiej koncepcyjnie pomyślany > Do bani z taką koncepcją, że każdy musi mieć na pececie swój własny > "niby-serwer" i synchronizować wszystko w obie strony, przy tym > chowając swoja zmiany przed światem tak długo, jak się da. No i te > setki opcji, przełączników, trybów... Główna koncepcja to jest raczej "content-addressable storage". Od strony doświadczenia użytkownika można z tego korzystać dokładnie tak samo, jak z SVNa, jeśli się chce. Co do "chowania wszystkiego przed światem tak długo, jak się da", to nie rozumiem. > > i bardziej skalowalny > > Nie będę się spierał, bo moje doświadczenie w adminowaniu svn-em jest > ograniczone do kilkuosobowych projektów, ale niemniej wypadałoby to > stwierdzenie jakoś uargumentować. Przez wiele lat z svn korzystały duże > i bardzo duże projekty. Wnioskuję więc, że jednak da się. Jednym z > ostatnich "dużych" projektów open-source, który wyemigrował z svn jest > FreeBSD. Jeden z core programistów podaje przesłanki za tą zmianą: > https://bsdimp.blogspot.com/2020/09/freebsd-subversion-to-git-migration.html > > W żadnym punkcie nie pada "gorsza skalowalność". Tutaj jest: "Git can easily and robustly be mirrored. Subversion can be mirrored, but that mirroring is far from robust."
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 12:44
Date: Wed, 25 Aug 2021 12:44
31 lines
2925 bytes
2925 bytes
2021-08-25 o 03:09 -0700, Maciek Godek napisał: > Główna koncepcja to jest raczej "content-addressable storage". Nie ma w tym niczego fajnego, to tylko pokłosie decentralizacji. > Od strony doświadczenia użytkownika można z tego korzystać dokładnie > tak samo, jak z SVNa, jeśli się chce. Znaczy patrząc na dwie rewizje mogę rzutem oka stwierdzić, która jest wcześniejsza, i oszacować mniej więcej o ile? No to git. :) > Co do "chowania wszystkiego przed światem tak długo, jak się da", to > nie rozumiem. O lokalne commity chodzi, i o kryjące się za nimi podejście "nie pokażę co robię póki nie wycackam tego do końca". > > W żadnym punkcie nie pada "gorsza skalowalność". > > Tutaj jest: > "Git can easily and robustly be mirrored. Subversion can be mirrored, > but that mirroring is far from robust." Klonowanie repozytoriów svn działa bardzo sprawnie (svnsync), korzystałem z tego wielokrotnie w ramach przeprowadzania repozytoriów svn między serwerami, a także w ramach duplikowania lokalnego repo FreeBSD w domu, kiedy jeszcze miałem w piwnicy kilka instalacji BSD. Ale fakt - nie jest to "wbudowane w protokół" i może wymagać nieco rzeźby przy jakichś egzotyczniejszych wymaganiach. Mateusz
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Wed, 25 Aug 2021 13:39
Date: Wed, 25 Aug 2021 13:39
17 lines
2892 bytes
2892 bytes
środa, 25 sierpnia 2021 o 14:44:04 UTC+2 Mateusz Viste napisał(a): > > Od strony doświadczenia użytkownika można z tego korzystać dokładnie > > tak samo, jak z SVNa, jeśli się chce. > Znaczy patrząc na dwie rewizje mogę rzutem oka stwierdzić, która jest > wcześniejsza, i oszacować mniej więcej o ile? No to git. :) Oczywiście. Git loguje datę każdego commita. Nie wiem, dlaczego to by miało zaskakiwać. > > Co do "chowania wszystkiego przed światem tak długo, jak się da", to > > nie rozumiem. > O lokalne commity chodzi, i o kryjące się za nimi podejście "nie > pokażę co robię póki nie wycackam tego do końca". Nie bardzo rozumiem jaką lepszą alternatywę daje SVN. "Nie scommituję dopóki nie wycykam tego do końca"?
Re: rzadki bład w programie w C++
Author: heby
Date: Wed, 25 Aug 2021 14:18
Date: Wed, 25 Aug 2021 14:18
6 lines
2345 bytes
2345 bytes
On 25/08/2021 15:39, Maciek Godek wrote: > Nie bardzo rozumiem jaką lepszą alternatywę daje SVN. > "Nie scommituję dopóki nie wycykam tego do końca"? Takie sytuacje to patlogia w grupach używających SVN. Codziennością są natomiast dziesiętki commitów dzienie w *jawny* branch.
Re: rzadki bład w programie w C++
Author: Mateusz Viste
Date: Wed, 25 Aug 2021 14:36
Date: Wed, 25 Aug 2021 14:36
16 lines
2403 bytes
2403 bytes
2021-08-25 o 16:18 +0200, heby napisał: > On 25/08/2021 15:39, Maciek Godek wrote: > > Nie bardzo rozumiem jaką lepszą alternatywę daje SVN. > > "Nie scommituję dopóki nie wycykam tego do końca"? > > Takie sytuacje to patlogia w grupach używających SVN. Codziennością > są natomiast dziesiętki commitów dzienie w *jawny* branch. Całkiem inne podejście, tak. Wpadłem właśnie na ciekawy (acz stary) post. Napisany starannie i z humorem. Podaję linka do lektury przy kawie, gdyby ktoś nie znał. :) https://www.bitquabit.com/post/unorthodocs-abandon-your-dvcs-and-return-to-sanity/ Mateusz
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Wed, 25 Aug 2021 16:14
Date: Wed, 25 Aug 2021 16:14
17 lines
2401 bytes
2401 bytes
wtorek, 24 sierpnia 2021 o 16:33:53 UTC+2 Maciek Godek napisał(a):
> > > Skąd jest ta funkcja "implode"?
> > to moja funkcja a la PHP - łączy stringi z kolekcji przedzielone pierwszym parametrem w jeden string
> Tzn. się domyślam do czego służy.
> Raczej bym chciał zobaczyć definicję, żeby stwierdzić, czy nie ma w niej jakiegoś nieoczywistego błędu
> (skoro to nie jest funkcja z biblioteki standardowej)
string implode(const string delim, const vector<string> &v) {
string s = "";
for (auto iter = v.begin(); iter != v.end(); ++iter) {
s += (*iter);
if (iter + 1 != v.end()) {
s += delim;
}
}
return s;
}
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Wed, 25 Aug 2021 19:22
Date: Wed, 25 Aug 2021 19:22
24 lines
3015 bytes
3015 bytes
środa, 25 sierpnia 2021 o 18:14:40 UTC+2 Robert Magdziarz napisał(a):
> wtorek, 24 sierpnia 2021 o 16:33:53 UTC+2 Maciek Godek napisał(a):
> > > > Skąd jest ta funkcja "implode"?
> > > to moja funkcja a la PHP - łączy stringi z kolekcji przedzielone pierwszym parametrem w jeden string
> > Tzn. się domyślam do czego służy.
> > Raczej bym chciał zobaczyć definicję, żeby stwierdzić, czy nie ma w niej jakiegoś nieoczywistego błędu
> > (skoro to nie jest funkcja z biblioteki standardowej)
> string implode(const string delim, const vector<string> &v) {
> string s = "";
> for (auto iter = v.begin(); iter != v.end(); ++iter) {
> s += (*iter);
> if (iter + 1 != v.end()) {
> s += delim;
> }
> }
> return s;
> }
Jak dla mnie to wygląda całkiem prawilnie (choć z C++em to nigdy do końca nie wiadomo).
Rozumiem że "string" to std::string i "vector" to std::vector?
W każdym razie raczej wygląda na to, że string jest pusty, bo tablica z jakichś względów jest pusta.
Jesteś w stanie określić wszystkie operacje, których dokonujesz na tej tablicy?
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Thu, 26 Aug 2021 04:57
Date: Thu, 26 Aug 2021 04:57
14 lines
2370 bytes
2370 bytes
środa, 25 sierpnia 2021 o 21:22:57 UTC+2 Maciek Godek napisał(a): > Rozumiem że "string" to std::string i "vector" to std::vector? tak > > W każdym razie raczej wygląda na to, że string jest pusty, bo tablica z jakichś względów jest pusta. tak > > Jesteś w stanie określić wszystkie operacje, których dokonujesz na tej tablicy? algorytm wstawiający stringi do vectora jest skomplikowany (liczy setki linii) i prawdopodobnie zawiera błąd logiczny, ale nie wiem jak ten błąd znaleźć
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Thu, 26 Aug 2021 06:59
Date: Thu, 26 Aug 2021 06:59
14 lines
3045 bytes
3045 bytes
czwartek, 26 sierpnia 2021 o 06:57:57 UTC+2 Robert Magdziarz napisał(a): > > Jesteś w stanie określić wszystkie operacje, których dokonujesz na tej tablicy? > algorytm wstawiający stringi do vectora jest skomplikowany (liczy setki linii) i prawdopodobnie zawiera błąd logiczny, ale nie wiem jak ten błąd znaleźć Jedną z metod jest pisanie przypadków testowych. Jeżeli jesteś w stanie wyodrębnić ten algorytm do osobnego programu, i uruchamiać z różnymi danymi wejściowymi, to to już jest duże ułatwienie. Wówczas jednym z pomysłów, oprócz ręcznego napisania przypadków testowych, byłoby też napisanie generatora losowych danych wejściowych, które powinny spełniać założenia algorytmu. Stąd kolejne pytanie: czy ten "algorytm" jest w miarę scentralizowany (tzn. jest jedna funkcja/procedura, która zajmuje się wstawianiem danych do tablicy), czy może rozproszony po całym programie? W tym pierwszym przypadku byłoby oczywiście łatwiej, ale jeżeli tak nie jest, to trzeba by zakasać rękawy i wyszukać wszystkie miejsca w programie, które modyfikują tę tablicę. Inna alternatywa byłaby taka, żeby ten algorytm napisać od podstaw, w sposób bardziej zdyscyplinowany.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Thu, 26 Aug 2021 14:40
Date: Thu, 26 Aug 2021 14:40
20 lines
3508 bytes
3508 bytes
czwartek, 26 sierpnia 2021 o 08:59:13 UTC+2 Maciek Godek napisał(a): > czwartek, 26 sierpnia 2021 o 06:57:57 UTC+2 Robert Magdziarz napisał(a): > > > > Jesteś w stanie określić wszystkie operacje, których dokonujesz na tej tablicy? > > algorytm wstawiający stringi do vectora jest skomplikowany (liczy setki linii) i prawdopodobnie zawiera błąd logiczny, ale nie wiem jak ten błąd znaleźć > Jedną z metod jest pisanie przypadków testowych. Jeżeli jesteś w stanie wyodrębnić ten algorytm do osobnego programu, i uruchamiać z różnymi danymi wejściowymi, to to już jest duże ułatwienie. > > Wówczas jednym z pomysłów, oprócz ręcznego napisania przypadków testowych, byłoby też napisanie generatora losowych danych wejściowych, które powinny spełniać założenia algorytmu. tego się praktycznie nie da zrobić, bo danymi wejściowymi do mojego programu są pliki z kodem źródłowym w PHP (program przetwarza programy w PHP) > > Stąd kolejne pytanie: czy ten "algorytm" jest w miarę scentralizowany (tzn. jest jedna funkcja/procedura, która zajmuje się wstawianiem danych do tablicy), czy może rozproszony po całym programie? algorytm składa się z wielu funkcji w różnych plikach kodu źródłowego > > W tym pierwszym przypadku byłoby oczywiście łatwiej, ale jeżeli tak nie jest, to trzeba by zakasać rękawy i wyszukać wszystkie miejsca w programie, które modyfikują tę tablicę. > > Inna alternatywa byłaby taka, żeby ten algorytm napisać od podstaw, w sposób bardziej zdyscyplinowany.
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Thu, 26 Aug 2021 16:36
Date: Thu, 26 Aug 2021 16:36
14 lines
3138 bytes
3138 bytes
> > Wówczas jednym z pomysłów, oprócz ręcznego napisania przypadków testowych, byłoby też napisanie generatora losowych danych wejściowych, które powinny spełniać założenia algorytmu. > tego się praktycznie nie da zrobić, bo danymi wejściowymi do mojego programu są pliki z kodem źródłowym w PHP (program przetwarza programy w PHP) Dlaczego miałoby się nie dać tego zrobić? Języki programowania mają regularne gramatyki, więc generowanie różnej maści programów nawet na podstawie samego BNFa jest względnie łatwe w realizacji. Tutaj jest jakiś zabawkowy przykład dla zdań języka Angielskiego: https://github.com/norvig/paip-lisp/blob/master/docs/chapter2.md > > Stąd kolejne pytanie: czy ten "algorytm" jest w miarę scentralizowany (tzn. jest jedna funkcja/procedura, która zajmuje się wstawianiem danych do tablicy), czy może rozproszony po całym programie? > algorytm składa się z wielu funkcji w różnych plikach kodu źródłowego No tak zapewne jest. Ale chodzi o to, czy ma jeden "punkt wejścia" w Twoim programie?
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Thu, 26 Aug 2021 17:19
Date: Thu, 26 Aug 2021 17:19
6 lines
2619 bytes
2619 bytes
czwartek, 26 sierpnia 2021 o 18:36:01 UTC+2 Maciek Godek napisał(a): > > > Stąd kolejne pytanie: czy ten "algorytm" jest w miarę scentralizowany (tzn. jest jedna funkcja/procedura, która zajmuje się wstawianiem danych do tablicy), czy może rozproszony po całym programie? > > algorytm składa się z wielu funkcji w różnych plikach kodu źródłowego > No tak zapewne jest. Ale chodzi o to, czy ma jeden "punkt wejścia" w Twoim programie? tak
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Thu, 26 Aug 2021 17:29
Date: Thu, 26 Aug 2021 17:29
6 lines
2807 bytes
2807 bytes
czwartek, 26 sierpnia 2021 o 18:36:01 UTC+2 Maciek Godek napisał(a): > > > Wówczas jednym z pomysłów, oprócz ręcznego napisania przypadków testowych, byłoby też napisanie generatora losowych danych wejściowych, które powinny spełniać założenia algorytmu. > > tego się praktycznie nie da zrobić, bo danymi wejściowymi do mojego programu są pliki z kodem źródłowym w PHP (program przetwarza programy w PHP) > Dlaczego miałoby się nie dać tego zrobić? Mój program dla tych samych danych wejściowych (tego samego kodu PHP) zachowuje się poprawnie, a czasami (ów rzadki przypadek) niepoprawnie.
Re: rzadki bład w programie w C++
Author: heby
Date: Thu, 26 Aug 2021 18:56
Date: Thu, 26 Aug 2021 18:56
5 lines
2265 bytes
2265 bytes
On 26/08/2021 19:29, Robert Magdziarz wrote: > Mój program dla tych samych danych wejściowych (tego samego kodu PHP) zachowuje się poprawnie, a czasami (ów rzadki przypadek) niepoprawnie. Sprawdziłeś już valgrinda? Isnieje wysokie prawdopodobieństwo, że da prawidłową odpowiedź na to pytanie.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Thu, 26 Aug 2021 19:32
Date: Thu, 26 Aug 2021 19:32
26 lines
3480 bytes
3480 bytes
czwartek, 26 sierpnia 2021 o 20:56:17 UTC+2 heby napisał(a): > On 26/08/2021 19:29, Robert Magdziarz wrote: > > Mój program dla tych samych danych wejściowych (tego samego kodu PHP) zachowuje się poprawnie, a czasami (ów rzadki przypadek) niepoprawnie. > Sprawdziłeś już valgrinda? Isnieje wysokie prawdopodobieństwo, że da > prawidłową odpowiedź na to pytanie. Nie bardzo go rozumiem: ==4215== ==4215== HEAP SUMMARY: ==4215== in use at exit: 238,583 bytes in 1,676 blocks ==4215== total heap usage: 29,427,297 allocs, 29,425,621 frees, 391,059,828 bytes allocated ==4215== ==4215== LEAK SUMMARY: ==4215== definitely lost: 0 bytes in 0 blocks ==4215== indirectly lost: 0 bytes in 0 blocks ==4215== possibly lost: 0 bytes in 0 blocks ==4215== still reachable: 238,583 bytes in 1,676 blocks ==4215== of which reachable via heuristic: ==4215== newarray : 1,408 bytes in 11 blocks ==4215== suppressed: 0 bytes in 0 blocks ==4215== Rerun with --leak-check=full to see details of leaked memory ==4215== ==4215== For counts of detected and suppressed errors, rerun with: -v ==4215== Use --track-origins=yes to see where uninitialised values come from ==4215== ERROR SUMMARY: 8864 errors from 8 contexts (suppressed: 0 from 0)
Re: rzadki bład w programie w C++
Author: heby
Date: Thu, 26 Aug 2021 19:54
Date: Thu, 26 Aug 2021 19:54
6 lines
2209 bytes
2209 bytes
On 26/08/2021 21:32, Robert Magdziarz wrote: > ==4215== ERROR SUMMARY: 8864 errors from 8 contexts (suppressed: 0 from 0) Nie ma nic wcześniej? valgrind moj-program 2>error.txt
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Fri, 27 Aug 2021 06:04
Date: Fri, 27 Aug 2021 06:04
98 lines
18387 bytes
18387 bytes
czwartek, 26 sierpnia 2021 o 21:54:16 UTC+2 heby napisał(a): > On 26/08/2021 21:32, Robert Magdziarz wrote: > > ==4215== ERROR SUMMARY: 8864 errors from 8 contexts (suppressed: 0 from 0) > Nie ma nic wcześniej? > > valgrind moj-program 2>error.txt ==4215== Memcheck, a memory error detector ==4215== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al. ==4215== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info ==4215== Command: ./dirtyphp --application=/home/robert/Projekty/design-patterns/src --result=/home/robert/Projekty/design-patterns/src_obfuscated --vendor=/home/robert/Projekty/design-patterns/vendor --vendorframeworks=symfony --vendorsystems=symfony --maxlinelen=1977 ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A80D: __wmemchr_avx2 (memchr-avx2.S:233) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x425F02: str_replace(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (common.hpp:385) ==4215== by 0x423CB6: explode(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (common.cpp:369) ==4215== by 0x42BFA9: cache::load_vendor_cache(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::unordered_map<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, std::hash<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::equal_to<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const, identifiers_vector*> > >&, std::unordered_map<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, std::hash<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::equal_to<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::allocator<std::pair<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const, identifiers_vector*> > >&) (cache.cpp:161) ==4215== by 0x440E8A: obfuscator::get_cmdline_options(int, char const**) (obfuscator.cpp:422) ==4215== by 0x414943: main (dirtyphp.cpp:103) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A7CC: __wmemchr_avx2 (memchr-avx2.S:213) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x425F02: str_replace(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (common.hpp:385) ==4215== by 0x43783B: backslash_special(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (common.hpp:404) ==4215== by 0x4389FC: exec_php_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (common.hpp:409) ==4215== by 0x44CBE8: obfuscator::remove_comments(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) const (obfuscator.cpp:986) ==4215== by 0x446B1F: obfuscator::perform_remove_comments(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:621) ==4215== by 0x445D79: obfuscator::check_application(bool) (obfuscator.cpp:570) ==4215== by 0x414F4F: main (dirtyphp.cpp:131) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A7E6: __wmemchr_avx2 (memchr-avx2.S:221) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x425F02: str_replace(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (common.hpp:385) ==4215== by 0x43783B: backslash_special(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (common.hpp:404) ==4215== by 0x4389FC: exec_php_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (common.hpp:409) ==4215== by 0x44CBE8: obfuscator::remove_comments(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) const (obfuscator.cpp:986) ==4215== by 0x446B1F: obfuscator::perform_remove_comments(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:621) ==4215== by 0x445D79: obfuscator::check_application(bool) (obfuscator.cpp:570) ==4215== by 0x414F4F: main (dirtyphp.cpp:131) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A80D: __wmemchr_avx2 (memchr-avx2.S:233) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) ==4215== by 0x452EC6: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1440) ==4215== by 0x4492EC: obfuscator::perform_remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:762) ==4215== by 0x44B179: obfuscator::obfuscate_application(bool) (obfuscator.cpp:881) ==4215== by 0x415085: main (dirtyphp.cpp:133) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A7E6: __wmemchr_avx2 (memchr-avx2.S:221) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) ==4215== by 0x452F2F: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1445) ==4215== by 0x4492EC: obfuscator::perform_remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:762) ==4215== by 0x44B179: obfuscator::obfuscate_application(bool) (obfuscator.cpp:881) ==4215== by 0x415085: main (dirtyphp.cpp:133) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A823: __wmemchr_avx2 (memchr-avx2.S:240) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) ==4215== by 0x452DEF: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1430) ==4215== by 0x4492EC: obfuscator::perform_remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:762) ==4215== by 0x44B179: obfuscator::obfuscate_application(bool) (obfuscator.cpp:881) ==4215== by 0x415085: main (dirtyphp.cpp:133) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A7CC: __wmemchr_avx2 (memchr-avx2.S:213) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) ==4215== by 0x452E64: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1435) ==4215== by 0x4492EC: obfuscator::perform_remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:762) ==4215== by 0x44B179: obfuscator::obfuscate_application(bool) (obfuscator.cpp:881) ==4215== by 0x415085: main (dirtyphp.cpp:133) ==4215== ==4215== Conditional jump or move depends on uninitialised value(s) ==4215== at 0x590A887: __wmemchr_avx2 (memchr-avx2.S:282) ==4215== by 0x4F7667A: std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::find(wchar_t const*, unsigned long, unsigned long) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25) ==4215== by 0x424757: str_replace_in_place(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&) (common.cpp:450) ==4215== by 0x425F02: str_replace(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > const&) (common.hpp:385) ==4215== by 0x437E84: backslash_special(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (common.hpp:404) ==4215== by 0x4389FC: exec_php_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (common.hpp:409) ==4215== by 0x44CF91: obfuscator::remember_strings(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, bool) (obfuscator.cpp:1005) ==4215== by 0x4484F2: obfuscator::perform_remember_and_replace_strings(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (obfuscator.cpp:710) ==4215== by 0x44B850: obfuscator::obfuscate_application(bool) (obfuscator.cpp:927) ==4215== by 0x415085: main (dirtyphp.cpp:133) ==4215==
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Fri, 27 Aug 2021 08:17
Date: Fri, 27 Aug 2021 08:17
15 lines
3726 bytes
3726 bytes
czwartek, 26 sierpnia 2021 o 19:29:49 UTC+2 Robert Magdziarz napisał(a): > czwartek, 26 sierpnia 2021 o 18:36:01 UTC+2 Maciek Godek napisał(a): > > > > Wówczas jednym z pomysłów, oprócz ręcznego napisania przypadków testowych, byłoby też napisanie generatora losowych danych wejściowych, które powinny spełniać założenia algorytmu. > > > tego się praktycznie nie da zrobić, bo danymi wejściowymi do mojego programu są pliki z kodem źródłowym w PHP (program przetwarza programy w PHP) > > Dlaczego miałoby się nie dać tego zrobić? > Mój program dla tych samych danych wejściowych (tego samego kodu PHP) zachowuje się poprawnie, a czasami (ów rzadki przypadek) niepoprawnie. Jesteś w stanie odpalać swój program w trybie wsadowym, tzn. bez interfejsu użytkownika? Chodziłoby o to, żeby np. odpalić go milion razy, albo przez cały dzień, z tymi samymi danymi wejściowymi, i zebrać statystyki zachowania programu - w ilu procentach przypadków daje błędne wyniki. Kolejny trop to pytanie, czy są w Twoim programie jakieś funkcje, których zachowanie zależy od aktualnej daty/godziny, albo czy używasz jakichś funkcji randomizujących. Poza tym niedeterminizm zachowania może się brać z dostępu do systemu plików albo do jakichś zasobów sieciowych. Ewentualnie może się też okazać, że problem jest natury sprzętowej, więc możesz spróbować wykonać testy również na innych maszynach (miałem kiedyś taki problem, że jedna z moich kości RAM była uszkodzona, i komputer zachowywał się bardzo dziwnie. Pamięć RAM można akurat sprawdzić za pomocą różnych skanerów)
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Fri, 27 Aug 2021 08:31
Date: Fri, 27 Aug 2021 08:31
11 lines
3310 bytes
3310 bytes
piątek, 27 sierpnia 2021 o 08:04:01 UTC+2 Robert Magdziarz napisał(a): > czwartek, 26 sierpnia 2021 o 21:54:16 UTC+2 heby napisał(a): > > On 26/08/2021 21:32, Robert Magdziarz wrote: > > > ==4215== ERROR SUMMARY: 8864 errors from 8 contexts (suppressed: 0 from 0) > > Nie ma nic wcześniej? > > > ==4215== Conditional jump or move depends on uninitialised value(s) > ==4215== at 0x590A80D: __wmemchr_avx2 (memchr-avx2.S:233) To ostrzeżenie sugeruje, że teoretycznie może to być problem z implementacją funkcji wmemchr dla procesorów Intela z tymi ich czarodziejskimi rozszerzeniami. Możesz spróbować skompilować z flagą -march=x86_64 i zobaczyć, czy valgrind będzie nadal wypluwał to ostrzeżenie. Jeżeli nie, to spróbuj użyć tak skompilowanej wersji do odtworzenia błędu (za pomocą takiego kombajnu, o którym pisałem w poprzednim poście). Jeżeli błędu nie zdołasz odtworzyć, będzie to oznaczało, że to może być wina błędnej implementacji funkcji systemowej, i możesz to ewentualnie zgłosić do GCC albo do Intela.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Fri, 27 Aug 2021 09:18
Date: Fri, 27 Aug 2021 09:18
9 lines
2908 bytes
2908 bytes
piątek, 27 sierpnia 2021 o 10:17:48 UTC+2 Maciek Godek napisał(a): > Jesteś w stanie odpalać swój program w trybie wsadowym, tzn. bez interfejsu użytkownika? > Chodziłoby o to, żeby np. odpalić go milion razy, albo przez cały dzień, z tymi samymi danymi wejściowymi, i zebrać statystyki zachowania programu - w ilu procentach przypadków daje błędne wyniki. rozważę to; ale czy taka statystyka pomoże mi w znalezieniu przyczyny problemu? > Kolejny trop to pytanie, czy są w Twoim programie jakieś funkcje, których zachowanie zależy od aktualnej daty/godziny, albo czy używasz jakichś funkcji randomizujących. używam w programie generatora liczb losowych ale nie w tym algorytmie
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Fri, 27 Aug 2021 09:44
Date: Fri, 27 Aug 2021 09:44
21 lines
4064 bytes
4064 bytes
piątek, 27 sierpnia 2021 o 11:18:55 UTC+2 Robert Magdziarz napisał(a): > piątek, 27 sierpnia 2021 o 10:17:48 UTC+2 Maciek Godek napisał(a): > > Jesteś w stanie odpalać swój program w trybie wsadowym, tzn. bez interfejsu użytkownika? > > Chodziłoby o to, żeby np. odpalić go milion razy, albo przez cały dzień, z tymi samymi danymi wejściowymi, i zebrać statystyki zachowania programu - w ilu procentach przypadków daje błędne wyniki. > rozważę to; ale czy taka statystyka pomoże mi w znalezieniu przyczyny problemu? Przede wszystkim, jeżeli zdołasz zautomatyzować odtwarzanie błędu, to to będzie bardzo pomocne do jego rozwiązania. Statystykę warto przy okazji poznać, żeby wiedzieć, czego można się spodziewać. Może być tak, że zebranie statystyki nic nie da, bo warunki testowe będą zawierały błąd systematyczny. Warto zapoznać się z tą prezentacją -- ona co prawda mówi o wydajności programów, ale wylicza kilka czynników, które mogą mieć wpływ na zachowanie programu: https://www.youtube.com/watch?v=r-TLSBdHe1A W szczególności wyrównanie adresów lub jego brak, jest takim czynnikiem. Autor prezentacji stworzył plug-in do clanga o nazwie "stabilizer", i gdyby normalnie błąd nie chciał się odtworzyć, możesz spróbować go użyć (bo on właśnie randomizuje adresy, do których sięga program) [Tyle że ja sam tego nigdy nie używałem, więc w razie czego nie pomogę] > > Kolejny trop to pytanie, czy są w Twoim programie jakieś funkcje, których zachowanie zależy od aktualnej daty/godziny, albo czy używasz jakichś funkcji randomizujących. > używam w programie generatora liczb losowych ale nie w tym algorytmie Losowych, czy pseudo-losowych?
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Fri, 27 Aug 2021 10:14
Date: Fri, 27 Aug 2021 10:14
6 lines
2660 bytes
2660 bytes
> > > Kolejny trop to pytanie, czy są w Twoim programie jakieś funkcje, których zachowanie zależy od aktualnej daty/godziny, albo czy używasz jakichś funkcji randomizujących. > > używam w programie generatora liczb losowych ale nie w tym algorytmie > Losowych, czy pseudo-losowych? pseudo, komputery są kiepskie w generowaniu liczb losowych
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Fri, 27 Aug 2021 10:16
Date: Fri, 27 Aug 2021 10:16
8 lines
3104 bytes
3104 bytes
piątek, 27 sierpnia 2021 o 12:14:02 UTC+2 Robert Magdziarz napisał(a): > > > > Kolejny trop to pytanie, czy są w Twoim programie jakieś funkcje, których zachowanie zależy od aktualnej daty/godziny, albo czy używasz jakichś funkcji randomizujących. > > > używam w programie generatora liczb losowych ale nie w tym algorytmie > > Losowych, czy pseudo-losowych? > pseudo, komputery są kiepskie w generowaniu liczb losowych No, ale ludzie są całkiem nieźli. Np. czas uruchomienia programu może służyć jako zarodek dla generatora, i wtedy działanie programu jest rzeczywiście losowe. Albo wartość zarodka może nie być określona przez Twój program i może być - z jego punktu widzenia - losowa.
Re: rzadki bład w programie w C++
Author: heby
Date: Fri, 27 Aug 2021 12:42
Date: Fri, 27 Aug 2021 12:42
18 lines
3697 bytes
3697 bytes
On 27/08/2021 08:04, Robert Magdziarz wrote: > ==4215== by 0x43783B: backslash_special(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (common.hpp:404) > ==4215== by 0x4389FC: exec_php_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (common.hpp:409) Gdzieś w tej okolicy możesz działać na niezainicjowanej pamięci. Albo wyskoczyłeś poza zakres tablicy albo wręcz przekazałałeś zdeallokowany pointer wskazujacy w kosmos. > ==4215== Conditional jump or move depends on uninitialised value(s) > ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) > ==4215== by 0x452EC6: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1440) Tu podobnie. Sprawdź co robisz w tych linijkach, które podpowiedział valgrind. Przy okazji: kompilowałeś program z -O0? Takie błedy często się ujawniają po wyłączeniu optymalizacji.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Fri, 27 Aug 2021 14:58
Date: Fri, 27 Aug 2021 14:58
20 lines
4096 bytes
4096 bytes
piątek, 27 sierpnia 2021 o 14:42:06 UTC+2 heby napisał(a): > On 27/08/2021 08:04, Robert Magdziarz wrote: > > ==4215== by 0x43783B: backslash_special(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >) (common.hpp:404) > > ==4215== by 0x4389FC: exec_php_script(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (common.hpp:409) > Gdzieś w tej okolicy możesz działać na niezainicjowanej pamięci. Albo > wyskoczyłeś poza zakres tablicy albo wręcz przekazałałeś zdeallokowany > pointer wskazujacy w kosmos. > > ==4215== Conditional jump or move depends on uninitialised value(s) > > ==4215== by 0x424ABA: is_subdir_of_any(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::vector<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, std::allocator<std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > const&) (common.cpp:476) > > ==4215== by 0x452EC6: obfuscator::remember_identifiers(std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >, identifiers_vector*, bool, bool) (obfuscator.cpp:1440) > Tu podobnie. > > Sprawdź co robisz w tych linijkach, które podpowiedział valgrind. kod wygląda ok > Przy okazji: kompilowałeś program z -O0? Takie błedy często się > ujawniają po wyłączeniu optymalizacji. co to znaczy "ujawniają się"? core dumped?
Re: rzadki bład w programie w C++
Author: heby
Date: Fri, 27 Aug 2021 15:11
Date: Fri, 27 Aug 2021 15:11
10 lines
2612 bytes
2612 bytes
On 27/08/2021 16:58, Robert Magdziarz wrote: >> Przy okazji: kompilowałeś program z -O0? Takie błedy często się >> ujawniają po wyłączeniu optymalizacji. > co to znaczy "ujawniają się"? core dumped? Nie tylko. Możesz mieć wiecej sytuacji błednych, które wcześniej przechodziły. Przykładowo: urwana referencja do obiektu na stosie (który został zniszczony) w przypadku -O0 wylatuje błedem znacznie częsciej niż przy -O2. Z uwagi na to że -O0 robi ogólnie wiecej operacji (np. nie robi inline i zamazuje stos) i ma większe szanse wdepnąć w śmieci.
Re: rzadki bład w programie w C++
Author: heby
Date: Fri, 27 Aug 2021 15:13
Date: Fri, 27 Aug 2021 15:13
8 lines
2437 bytes
2437 bytes
On 27/08/2021 16:58, Robert Magdziarz wrote: >> Sprawdź co robisz w tych linijkach, które podpowiedział valgrind. > kod wygląda ok Zaryzykuje, że urwalo Ci gdzieś referencje. Valgrid raportuje podobne rzeczy w przypadku std::string const& getTempValue(); czyli to co zostanie zwrócone jest czasami jeszcze troche działające i wylatuje później, przy dalszych operacjach.
Re: rzadki bład w programie w C++
Author: Robert Magdziarz
Date: Fri, 27 Aug 2021 15:57
Date: Fri, 27 Aug 2021 15:57
11 lines
2975 bytes
2975 bytes
piątek, 27 sierpnia 2021 o 17:13:08 UTC+2 heby napisał(a): > On 27/08/2021 16:58, Robert Magdziarz wrote: > >> Sprawdź co robisz w tych linijkach, które podpowiedział valgrind. > > kod wygląda ok > Zaryzykuje, że urwalo Ci gdzieś referencje. Valgrid raportuje podobne > rzeczy w przypadku std::string const& getTempValue(); czyli to co > zostanie zwrócone jest czasami jeszcze troche działające i wylatuje > później, przy dalszych operacjach. wydaje mi się że wszystko jest dobrze poza tym wymienione wiersze kodu nie należą do wspomnianego "wadliwego" algorytmu, który mam poprawić
Re: rzadki bład w programie w C++
Author: Maciek Godek
Date: Fri, 27 Aug 2021 18:59
Date: Fri, 27 Aug 2021 18:59
15 lines
3555 bytes
3555 bytes
piątek, 27 sierpnia 2021 o 17:57:26 UTC+2 Robert Magdziarz napisał(a): > piątek, 27 sierpnia 2021 o 17:13:08 UTC+2 heby napisał(a): > > On 27/08/2021 16:58, Robert Magdziarz wrote: > > >> Sprawdź co robisz w tych linijkach, które podpowiedział valgrind. > > > kod wygląda ok > > Zaryzykuje, że urwalo Ci gdzieś referencje. Valgrid raportuje podobne > > rzeczy w przypadku std::string const& getTempValue(); czyli to co > > zostanie zwrócone jest czasami jeszcze troche działające i wylatuje > > później, przy dalszych operacjach. > wydaje mi się że wszystko jest dobrze > poza tym wymienione wiersze kodu nie należą do wspomnianego "wadliwego" algorytmu, który mam poprawić Jeżeli owe wiersze kodu są uruchomione przed odpaleniem Twojego algorytmu, to mogą coś napsuć w stanie programu. Urok takich języków jak C polega na tym, że możesz sobie niechcący nadpisać jakiś losowy fragment pamięci, co może później mieć zupełnie katastrofalne skutki. (W sumie jeżeli nawet są uruchomione po Twoim algorytmie, ale zanim uzyskasz dostęp do pliku, to też się mogą wydarzyć dziwne rzeczy, ale tutaj wygląda na to, że sam plik jest generowany prawidłowo)
Page 1 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