Hallo Daniel,
Daniel Leidert schrieb:
Ich habe ein Problem mit apt-ftparchive unter Debian. Wird das Programm via cron-Job aufgerufen, dann wirft es Fehlermeldungen wie
E: Sub-process gzip returned an error code (100)
Rufe ich das Programm aber von der Konsole auf, funktioniert alles. gzip ist natürlich installiert. Nun wurde mir vorgeschlagen, mittels gdb mal einen Blick auf den Stacktrace zu werfen. Wie muss ich gdb jetzt in den cron-job einbinden? Ich vermute mal mittels -batch und -x|-command. Der Fehler wird von dann von apt-pkg/contrib/fileutl.cc (Zeile 390) auf stderr ausgegeben (müsste ich da einen Break-Point setzen? - wahrschenlich müsste ich eher beim Aufruf von gzip den Break-Point setzen, richtig?). Könnte mir jemand bei dem Problem behilflich sein? Das Problem hindert aktuell debarchiver am korrekten Funktionieren und das ist sehr lästig. Allerdings bin ich beim Debuggen nicht so versiert.
Bevor Du dich mit gdb auseinandersetzt, probiere mal strace. Damit bekommst Du alle Systemaufrufe deines Programmes zu sehen. Der Aufruf sollte in etwa so erfolgen: strace -f apt-ftparchive 2> /tmp/strace.log
Im Output selbst stehen dann auch die Returncodes der Systemaufrufe. Meist findet man dann ein ENOPERM, was auf ein Recteproblem hinweist.
Wenn Du doch gdb einsetzen willst, dann brauchst Du wahrscheinlich eine Datei in der der breakpoint gesetzt wird, das Programm gestartet und anschließend ein Backtrace ausgegeben wird:
Ich habe zur Zeit kein Linux zur Hand, aber es sollte in etwa so aussehen:
break apt-pkg/contrib/fileutl.cc:390 run bt (evtl. auch btfull oder so ähnlich) disable 1 (Breakpoint 1 deaktivieren) continue
Dieses Script gibst Du dem gdb mit (ich glaube mit -x). Bevor Du das alles in die Crontab einträgst, solltest Du es erst mal im gdb selbst ausprobieren. apt-ftparchive sollte auf jeden Fall mit Debugsymbolen versehen sein (-ggdb beim Übersetzen).
Viel Erfolg bei der Suche, Gregor