Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Zeilennummer bei ABEND in Programm
Gehen Sie zu Seite 1, 2  Weiter
 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sulu
Gast





BeitragVerfasst am: 14. Feb 2002 11:25   Titel: Zeilennummer bei ABEND in Programm

Hi Folks.

Ist es möglich dass ein C-Programm bei einem abnormalen Programmende die Zeilennummer der "bösen" Source-Code-Zeile ausgibt. Ich habe in der gcc-man-page herumgestöbert, finde aber nichts dergleichen. Aus den dump-optionen des gcc werde ich auch nicht schlau (Ich will ja nicht den gcc debuggen ??).

Gruss und Dank

Andy
 

CoreDump
Gast





BeitragVerfasst am: 14. Feb 2002 13:15   Titel: Re: Zeilennummer bei ABEND in Programm

übersetz dein c-programm mit der -g option und starte es dann mit gdb
(oder auch ddd, wenn du ne oberfläche brauchst)
 

arni



Anmeldungsdatum: 10.02.2002
Beiträge: 73
Wohnort: Berlin

BeitragVerfasst am: 14. Feb 2002 13:35   Titel: Re: Zeilennummer bei ABEND in Programm

Besser (und guter Stil) wäre von vornherein den Code mit entsprechenden Debug-Macros zu umgeben und die vordefinierten Macros wie __LINE__ oder __FILE__ dazu zu benutzen um entsprechende Zusatzinformation auszugeben.
Der Debugger sollte das letzte Mittel sein um Fehler aufzuspüren.
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Sulu
Gast





BeitragVerfasst am: 14. Feb 2002 16:07   Titel: Re: Zeilennummer bei ABEND in Programm

Hi CodeDump.

Danke aber das ist mir schon klar. Denn ddd kenn ich. Es gibt bei uns in der Firma bei PGMABENDS unserer COBOL-Programme eine Fehlermeldung eben mit Zeilennummer. Das ist sehr angenehmr weil man dann sofort den Code inpizieren kann.

@arni
Wir habe schon ein Debug-Feature in Form von Verbose-Levels die eine Eingrenzung des Fehlers erlauben.

Aber vielleicht ist der Fehler ja nicht wiederholbar. Dann nützt mir Debuggen nichts und dank der Zeilennummer weis ich aber schon wo es ein Problem geben kann. Die Ursache liegt möglicherweise viel weiter vorne im Code sodass man um eine Analyse der Abhängigkeiten wahrscheinlich nicht umhinkommt.
 

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 14. Feb 2002 17:37   Titel: Re: Zeilennummer bei ABEND in Programm

Hi!

Was spricht dagegen, Coredumps zu aktivieren und dann schnell mit gdb zu öffnen? Da kann man gleich noch ein Backtrace und Werte von Variablen ausgeben lassen. Das ist wohl hilfreicher als nur die Zeilennummer. Und man muss das Programm nicht von Anfang an im gdb laufen lassen, d.h. es funktioniert auch dann, wenn es nicht ohne weiteres möglich ist, den Fehler zu reproduzieren.

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

sulu



Anmeldungsdatum: 29.10.2001
Beiträge: 64
Wohnort: Dornbirn

BeitragVerfasst am: 14. Feb 2002 19:00   Titel: Re: Zeilennummer bei ABEND in Programm

Hi Wolfgang.

Das hat was für sich.
Man kann also mit dem gdb den core "lesen".
Damit hat man zwar noch nicht den Bezug zur Sourcelinbe aber einen Anhaltspunkt über
die Absturzursache


Gruss
SULU
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 14. Feb 2002 22:11   Titel: Re: Zeilennummer bei ABEND in Programm

Hi!

> Damit hat man zwar noch nicht den Bezug zur Sourcelinbe aber einen Anhaltspunkt über die Absturzursache

Wie kommst du darauf, dass man nicht den Bezug zur Quellcode-Zeile hätte?

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Sulu
Gast





BeitragVerfasst am: 15. Feb 2002 12:02   Titel: Re: Zeilennummer bei ABEND in Programm

@Wolfgang

"Wie kommst du darauf, dass man nicht den Bezug zur Quellcode-Zeile hätte?"

Ähem !

War nur so gedacht.
Aber muss nicht die -g Option aktivieren damit der gdb auch die Infos hat die er braucht?
Die Debug-Info bläst halt die Binaries auf. Hmmm.. Damit könnte man leben.

Gruss
Sulu
 

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 15. Feb 2002 19:24   Titel: Re: Zeilennummer bei ABEND in Programm

Hi!

> Die Debug-Info bläst halt die Binaries auf.

Ja, ein wenig; aber ich glaube nicht, dass deswegen die Platte zu schnell voll wird.

Hmmm, im Topic des #hurd-Channels auf OPN steht gerade: "Debian sucks, it does not include debugging symbols to make the life of all hackers easier." Was sol man da noch hinzufügen? Mir wäre es auch lieber, wenn alle Programme Debugging-Symbole enthalten würden. Nicht ohne Grund ist das die Voreinstellung von GNU Automake.

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 15. Feb 2002 19:42   Titel: Re: Zeilennummer bei ABEND in Programm

> Was spricht dagegen, Coredumps zu aktivieren und dann schnell mit gdb zu öffnen?

Das mag vielleicht eine ziemlich dumme Frage sein, aber wie aktiviere ich denn Coredumps? Kann ich's irgendwie so einstellen, daß ich zu jedem abgestürzten Programm -- also nicht nur zu meinen eigenen, oder Programmen die ich im Debugger starte -- anschließend einen Coredump erhalte?
Ich denke dabei z.B. an einige Situationen, wo mir X11 unter mysteriösen Umständen abgeschmiert ist. Nun ja, die Ursache war ein Segfault, soviel weiß ich, aber was, wie, und wo? Da wäre ein Coredump ganz praktisch, und zwar ohne daß ich X ständig im Debugger laufen lassen muß, und ohne daß ich's mit Debug-Info rekompilieren muß (daß ein Coredump ohne Debug-Info nur bedingt aussagekräftig ist, ist mir klar)...

Wahrscheinlich habe ich irgendwo etwas offensichtliches übersehen, oder? Wäre nett, wenn mich da mal jemand aufklären könnte...

Danke,
Dominic
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 15. Feb 2002 23:30   Titel: Re: Zeilennummer bei ABEND in Programm

Hi!

> Das mag vielleicht eine ziemlich dumme Frage sein, aber wie aktiviere ich denn Coredumps?

man ulimit

Was aber an einem Coredump ohne Debugging-Symbole sinnvoll sein soll, weiß ich nicht, erscheint mir völlig nutzlos.

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

sulu



Anmeldungsdatum: 29.10.2001
Beiträge: 64
Wohnort: Dornbirn

BeitragVerfasst am: 16. Feb 2002 0:33   Titel: Re: Zeilennummer bei ABEND in Programm

Ho Wolfgang.

Wenn ich dich richtig verstehe dann soll man die -g Option beim gcc standardmässig verwenden und man muss noch die Shell dazu bringen,
dass die bei einem Abend einen core schreibt (ulimit ??). Den core kann man anschliessend mit dem gdb analysieren.
Wenn das so geht dann werde ich das mal ausprobieren.
Ein kleines Null-Pointer-Assignment ist ja mit C kein grosses Problem
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 16. Feb 2002 0:34   Titel: Re: Zeilennummer bei ABEND in Programm

Hm, erstmal danke.

Das mit den Coredumps funktioniert jetzt zumindest. Allerdings hätte ich erwartet, daß ich mit Hilfe der Core file dann auch einen Backtrace erhalten kann, was aber anscheinend nicht geht... Habe ich da etwas übersehen, oder ist das tatsächlich nicht möglich? Ich muß zugeben, der Nutzen eines Coredumps, ohne daß man sich anschließend den Backtrace ansehen kann, geht gegen null...

Dominic
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

bakunin



Anmeldungsdatum: 16.08.1999
Beiträge: 597
Wohnort: Lorsch (Südhessen)

BeitragVerfasst am: 16. Feb 2002 1:42   Titel: Re: Zeilennummer bei ABEND in Programm

Hi!

Sulu schrieb:
> Wenn ich dich richtig verstehe dann soll man die -g Option beim gcc standardmässig verwenden und man muss noch die Shell dazu bringen, dass die bei einem Abend einen core schreibt (ulimit ??).

Ja. Da offenbar der Hinweis auf die Manpage nicht ausgereicht hat: "ulimit -c eine_zahl", wobei eine_zahl die maximale Größe eines Coredumps ist, der angelegt werden soll.

> Den core kann man anschliessend mit dem gdb analysieren.

Ja, und zwar via "gdb name_des_programms name_des_coredumps", wobei Coredumps unter GNU/Linux typischerweise "core" heißen, unter Unix-Systemen oft "programmname.core"

BugCreator schrieb:
> Allerdings hätte ich erwartet, daß ich mit Hilfe der Core file dann auch einen Backtrace erhalten kann, was aber anscheinend nicht geht...

Du Witzbold. Wie soll denn ein sinnvoler Backtrace angezeigt werden, wenn das Binary keine Informationen über die Namen von Funktionen und ihren Argumenten enthält? Der Debugger kann ja nicht zaubern.

Gerade deshalb finde ich es ja nervig, wenn Distributionen Programme ohne Debugging-Symbole enthalten.

Cheers,
GNU/Wolfgang
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

das



Anmeldungsdatum: 22.01.2001
Beiträge: 78
Wohnort: 42369 Wuppertal

BeitragVerfasst am: 16. Feb 2002 2:32   Titel: Re: Zeilennummer bei ABEND in Programm

Hi Wolfgang!

Augenblick mal, selber Witzbold

Es kann ja sein, daß ich hier einem riesigen Irrtum aufgesessen bin, aber soweit ich weiß braucht man nicht zwangsläufig volle Debug-Infos, um einen Backtrace zu erhalten, der zumindest die Funktionsnamen enthält. Sicher, die Infos über Parameter etc. hat man dann nicht, man weiß aber zumindest, wer wen in welcher Reihenfolge aufgerufen hat.

Naja, vielleicht sollte ich dazu sagen, daß ich in der Regel nicht in C, sondern in C++ programmiere (aber mit dem Thema will ich dich jetzt ja nicht quälen *fg*). Aber soweit ich weiß gilt auch für C-Programme, daß die Funktionsnamen auch dann im Binary enthalten sind, wenn man ohne -g kompiliert. Allerdings darf man das Binary dann nicht strippen (und genau das tun wahrscheinlich die Distributoren), denn danach sind die Namen wirklich weg.

Und davon mal abgesehen habe ich auch dann im gdb keinen Backtrace, wenn ich die Core file eines Programms öffne, das mit kompletten Debug-Infos kompiliert wurde. Und genau darauf zielte meine Frage ab, denn es wäre wirklich schön wenn...

Gute Nacht,
Dominic
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Gehen Sie zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy