Linux: Debugger i efterhand?

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

Linux: Debugger i efterhand?

Inlägg 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?
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Linux: Debugger i efterhand?

Inlägg av SvenW »

Är du rutinerad användare av gdb och valgrind?
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6954
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux: Debugger i efterhand?

Inlägg av Marta »

Sådär. Använder båda, men är inte superproffs på någon av dem.
SvenW
Inlägg: 1124
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: Linux: Debugger i efterhand?

Inlägg 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.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6954
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux: Debugger i efterhand?

Inlägg 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.
Användarvisningsbild
mankan
EF Sponsor
Inlägg: 908
Blev medlem: 18 juli 2015, 11:23:22
Ort: Linköping

Re: Linux: Debugger i efterhand?

Inlägg 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.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Linux: Debugger i efterhand?

Inlägg 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.
Användarvisningsbild
hawkan
Inlägg: 2636
Blev medlem: 14 augusti 2011, 10:27:40

Re: Linux: Debugger i efterhand?

Inlägg 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.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 6954
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: Linux: Debugger i efterhand?

Inlägg av Marta »

Tackar för råden. Har testat gdb -p och det fungerar perfekt, åtminstone på ett program som inte har "fastnat".
agehall
Inlägg: 427
Blev medlem: 12 augusti 2020, 19:27:54

Re: Linux: Debugger i efterhand?

Inlägg 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.
Skriv svar