Segmentation fault przy nie pełnym make (netbeans)

0

Zauważyłem, że kiedy netbeans buduje projekt (za pomocą make) to bardzo często nie kompiluje wszystkich plików na raz, tylko poszczególne pliki cpp(no i potem całość linkuje), podczas gdy clean build kompiluje wszystkie pliki.

Tylko nie wiem dlaczego, ale czasami mam tak (średnio raz na... 50 razy?), że przy zwykłym build uruchomienie programu wyrzuca mi segmentation faulty. Nie mam zielonego pojęcia dlaczego. Czym to może być spowodowane? Mógłby mnie ktoś nakierować na to gdzie powinienem szukać?

EDIT: wiem, że wystarczy w takiej sytuacji zrobić clean builda, ale no generalnie czasami to denerwuje, a czasami prowadzi tylko do straty czasu nad szukaniem jakis wycieków pamięci i ogólnie korupcji pamięci w kodzie, gdzie tego nie znajdziemy.

0

Jedno z drugim nie ma raczej nic wspólnego. Make przebudowuje tylko zmodyfikowane pliki wiec jak zmieniłes 1 plik to nie ma sensu kompilować pozostałych. Segfaulta szukaj w swoim kodzie. Najprościej za pomocą debugera albo valgrinda.

0

Nie ma żadnych problemów z manipulacją pamięci w moim kodzie, wystarczy że wykonam clean builda i nie ma już żadnych problemów. A po analizie valgrinda nic mi konkretnego nie pokazuje. Jak debugguje i pauzuje przy miejscu gdzie wystąpił segfault to pokazuje mi na element który zazwyczaj nie ma żadnych problemów z pamięcią (przynajmniej nie takich, które sam był stworzył pisząc jakieś WTF w kodzie).

Rzadko u mnie to występuje, ale występuje, a ze względu na to, że programuje jeden projekt przez dłuższy okres czasu taka sytuacja wystąpiła u mnie średnio... z 15 razy. Jeżeli pojawi się to u mnie podobnie, to postaram się przeanalizować dodatkowo valgrindem jeszcze przed clean buildem.

0

Z problemami z pamięcią w C++ tak już jest że trudno je wyśledzić i że zwykle powodują błąd w zupełnie innym miejscu niż coś namieszałeś ;] To nie jest kwestia clean builda tylko kwestia że uruchamiasz program jeszcze raz po prostu. A że debuger pokazuje w dziwne miejsce? To niestety częste -> wyobraź sobie że nadpisałeś gdzieś stos wychodząc poza tablicę, ten błąd objawi się dopiero kiedy będziesz korzystał z tej nadpisanej wartości, co może się dziać w zupełnie innym miejscu w kodzie niż ta nadpisująca pętla...

0

Być może tak było, ale nie orientuje się, bym popełniał jakieś byki (nawet których na pierwszy rzut oka nie widać - czyli tych które nie wywalają mi od razu programu). Nawet jeżeli jakieś popełniam, to w valgrindzie czesto to poprawiam. Wiem jedno, ta sytuacja z clean buildem dosłownie naprawiała mi problemy których nie było, bo po clean buildzie raz czy dwa wrzuciłem do valgrinda program... Nic nie wykazał.

0

Valgrind wykryje problem tylko jeśli on wystąpi. Bardzo możliwe że problem nie występuje zawsze tylko w pewnej szczególnej sytuacji ;)

1

A dlaczego nie spróbujesz zbudować projektu w debugu, odpalić x-razy, zabrać core dump, wyciągnąć z niego call stack i go przeanalizować (albo po prostu odpalać od razu program w gdb/lldb)?

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