Linux: Debugger i efterhand?
Linux: Debugger i efterhand?
När ett program helt plötsligt och oväntat "fryser", finns det då några möjligheter att ta reda på något om vad som inträffat? T.ex. en adress som ingår i loopen där det fastnat, eller vilken rutin i ett externt lib den fastnat i? Det gäller givetvis eget program där källkod och root-acces finns tillgängligt. Skrivet i gcc. Inträffar det igen vill jag givetvis kunna ta reda på felet, men kör det ju normalt inte i gdb.
Det blev totalt tvärlås. Ingen reaktion på tangentbordet eller på menyclick, inklusive krysset. Ingen uppdatering efter att fönstret varit minimerat. Däremot fungerade kill proc#, utan -9. Säger detta något till Er med erfarenhet vad det kan vara som inträffat?
Det blev totalt tvärlås. Ingen reaktion på tangentbordet eller på menyclick, inklusive krysset. Ingen uppdatering efter att fönstret varit minimerat. Däremot fungerade kill proc#, utan -9. Säger detta något till Er med erfarenhet vad det kan vara som inträffat?
Re: Linux: Debugger i efterhand?
Sådär. Använder båda, men är inte superproffs på någon av dem.
Re: Linux: Debugger i efterhand?
Det händer att program fungerar under gdb men inte utan.
Annars har jag inte upplevt att den inte hittar åtminstone något av återstående fel.
Glöm inte att kompilera men g-flaggan.
Annars har jag inte upplevt att den inte hittar åtminstone något av återstående fel.
Glöm inte att kompilera men g-flaggan.
Re: Linux: Debugger i efterhand?
Det här var en version för vanlig användning, kompilerad med maxxad optimering. Men medan processen fortfarande är aktiv borde det vara möjligt att göra stackdumps på något sätt och även få fram var processen körs och då kunna utläsa var den sitter fast. Frågan är bara hur, har aldrig haft anledning att leta denna typ av fel innan. Det var första och hittills enda gången programmet låst sig utan segfault. Har varit helt stabilt under lång tid.
Re: Linux: Debugger i efterhand?
Har du provat ansluta gdb till den körande processen (gdb -p <pid>) ? Testat strace?
Annars kanske https://www.youtube.com/watch?v=-n9Fkq1e6sg vara till hjälp, ca 37min in.
Annars kanske https://www.youtube.com/watch?v=-n9Fkq1e6sg vara till hjälp, ca 37min in.
Re: Linux: Debugger i efterhand?
mankans enradare räcker. gdp -p <pid>, alternativt gdb> attach <pid>. strace är bra den med på sitt sätt, ett annat sätt.
Re: Linux: Debugger i efterhand?
Man kan också döda processen och få den att generera en core-fil (om ulimit tillåter) som man kan debugga
kill -QUIT <pid>
gdb program core
men det är bättre att attacha till en process i gdb och trycka ctrl-c.
kill -QUIT <pid>
gdb program core
men det är bättre att attacha till en process i gdb och trycka ctrl-c.
Re: Linux: Debugger i efterhand?
Tackar för råden. Har testat gdb -p och det fungerar perfekt, åtminstone på ett program som inte har "fastnat".
Re: Linux: Debugger i efterhand?
Finns även ett hack som heter gcore som kan skapa en core-fil av en körande process utan att döda den. Mycket praktiskt om man vill få en core och kanske inte har satt rätt ulimits innan man startade processen.