segfault ? ? ?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6887
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

segfault ? ? ?

Inlägg av Marta »

Använder gcc utan ++. Kompilerar utan att ange någon -O. Debuggar med gdb. Nedanstående felutskrift ör fullständigt värdelös. Antar den försvinner in i något systemlib och fastnar. Listan slutar innan det kommer något namn på funktioner i mitt program även om den får skriva ut allt den har.
Hur skall jag göra för att få något användbart?

Program received signal SIGSEGV, Segmentation fault.
0x0000002000000020 in ?? ()
(gdb) bt
#0 0x0000002000000020 in ?? ()
#1 0x000000200000007c in ?? ()
#2 0x0000002000000020 in ?? ()
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: segfault ? ? ?

Inlägg av hawkan »

Du kan testa att köra strace, den kan ge åtminstone grovt var det ballar ur.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6887
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: segfault ? ? ?

Inlägg av Marta »

Program received signal SIGSEGV, Segmentation fault.
0x0000002000000020 in ?? ()
(gdb) strace
warning: Couldn't determine the static tracepoint marker to probe
Static tracepoint 1 at 0x2000000020
(gdb)

Det där var inte bättre. Får jag bara veta vilken funktion i mitt program som innehåller felet har det hittills varit möjligt att hitta det.
hummel
Inlägg: 2259
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: segfault ? ? ?

Inlägg av hummel »

Du får ta till det gamla knepet att logga i programmet.
Förutsätter att du gör kontroll av indata med typ assert() i alla dina funktioner.
Användarvisningsbild
sommarlov
Inlägg: 514
Blev medlem: 28 november 2015, 19:03:40
Ort: 08

Re: segfault ? ? ?

Inlägg av sommarlov »

Nu var det ett tag sedan, men är det inte type "gcc -g" för att gå debug symbols i binären?
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: segfault ? ? ?

Inlägg av mankan »

sommarlov har helt rätt, bygg med -g. Om det är svårt att single steppa i gdb så rekommenderas -Og istf -O2/3/s osv.
Mr Andersson
Inlägg: 1394
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: segfault ? ? ?

Inlägg av Mr Andersson »

-Og är även bättre än -O0 (ie. inget -O)
Optimize debugging experience. -Og should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience. It is a better choice than -O0 for producing debuggable code because some compiler passes that collect debug information are disabled at -O0.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: segfault ? ? ?

Inlägg av mankan »

Japp, och ibland kan man ha kod som inte ens kompilerar med -O0.
Användarvisningsbild
hawkan
Inlägg: 2585
Blev medlem: 14 augusti 2011, 10:27:40

Re: segfault ? ? ?

Inlägg av hawkan »

strace är inte i gdb, Det är ett unix-kommando. Skriv strace framför programnamnet när du startar: % strace koolprog
Och gegug-flaggan slår man på reflexmässigt när det trasslar.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6887
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: segfault ? ? ?

Inlägg av Marta »

Segfaulten är fixad nu, den fanns i den funktion där jag anade att den var, men antagligen var det optimeringen som dolde den.

Hade lagt till en puts("in")/puts("out") i början/slutet och båda exekverades, så då är segfaulten ju på ett annat ställe. FEL! Den var i raden innan puts("out")... Compilern placerade inte raderna i rätt ordning. Det lurade mig att börja leta på andra ställen :evil:

Jäkla oskick. Tänk om det istället varit t.ex. två skrivningar till en port. Den första med data, den andra med klockpuls. Det hade inte fungerat.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: segfault ? ? ?

Inlägg av mankan »

Klockpuls: det har man ju volatile till.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6887
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: segfault ? ? ?

Inlägg av Marta »

Är inte så ju med alla dessa subtila småsaker innan de blivit självklarheter. För hårdvarunära program kan ordningsföljd vara väldigt viktigt, men det får vänta tills om och när något blir aktuellt...
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 905
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: segfault ? ? ?

Inlägg av mankan »

Jo, erfarenhet är att känna igen sina misstag när man gör om dem ;-)
agehall
Inlägg: 418
Blev medlem: 12 augusti 2020, 19:27:54

Re: segfault ? ? ?

Inlägg av agehall »

Självklart kan ordningsföljd vara viktigt, men om man skriver korrekt kod för det så rör inte kompilatorn ordningen. Även om det förekommer, så är det högst otroligt att en modern (stabil version) GCC skulle optimera sönder sådan kod.
Skriv svar