Sida 1 av 1
segfault ? ? ?
Postat: 9 december 2022, 10:16:19
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 ?? ()
Re: segfault ? ? ?
Postat: 9 december 2022, 10:44:27
av hawkan
Du kan testa att köra strace, den kan ge åtminstone grovt var det ballar ur.
Re: segfault ? ? ?
Postat: 9 december 2022, 12:30:30
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.
Re: segfault ? ? ?
Postat: 9 december 2022, 12:53:41
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.
Re: segfault ? ? ?
Postat: 9 december 2022, 17:27:38
av sommarlov
Nu var det ett tag sedan, men är det inte type "gcc -g" för att gå debug symbols i binären?
Re: segfault ? ? ?
Postat: 9 december 2022, 18:23:15
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.
Re: segfault ? ? ?
Postat: 9 december 2022, 18:32:34
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.
Re: segfault ? ? ?
Postat: 9 december 2022, 18:37:10
av mankan
Japp, och ibland kan man ha kod som inte ens kompilerar med -O0.
Re: segfault ? ? ?
Postat: 9 december 2022, 22:56:30
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.
Re: segfault ? ? ?
Postat: 10 december 2022, 06:53:11
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
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.
Re: segfault ? ? ?
Postat: 10 december 2022, 09:28:47
av mankan
Klockpuls: det har man ju volatile till.
Re: segfault ? ? ?
Postat: 10 december 2022, 10:13:09
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...
Re: segfault ? ? ?
Postat: 10 december 2022, 16:44:12
av mankan
Jo, erfarenhet är att känna igen sina misstag när man gör om dem

Re: segfault ? ? ?
Postat: 10 december 2022, 19:43:38
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.