Sida 1 av 1

Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 14:32:41
av Marta
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?

Re: Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 15:31:24
av SvenW
Är du rutinerad användare av gdb och valgrind?

Re: Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 15:41:07
av Marta
Sådär. Använder båda, men är inte superproffs på någon av dem.

Re: Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 16:23:30
av SvenW
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.

Re: Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 16:53:48
av Marta
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?

Postat: 29 augusti 2023, 20:08:05
av mankan
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.

Re: Linux: Debugger i efterhand?

Postat: 29 augusti 2023, 20:21:06
av hawkan
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?

Postat: 30 augusti 2023, 11:32:18
av hawkan
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.

Re: Linux: Debugger i efterhand?

Postat: 30 augusti 2023, 17:09:56
av Marta
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?

Postat: 31 augusti 2023, 16:07:23
av agehall
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.