Superuser

Autor Thema: Debuggen mit IRIX...  (Gelesen 4412 mal)

majix

  • Gast
Debuggen mit IRIX...
« am: 18. Januar 2003, 18:39:37 »
So, ich habs jetzt endlich geschafft, ein Programm zu kompilieren und zu linken  :D

Aber es stürzt sofort ab  :'( Naja, groß was anderes hatte ich auch nicht erwartet, da doch ziemlich viel Zeug blind von WIndows nach IRIX portiert ist.

Aber jetzt die Frage: Gibt es einen guten, kostenlosen Debugger für IRIX, so richtig was komfortables mit grafischer Oberfläche?

Ich hab mir den xmgdb angesehen, aber irgendwie klappts nicht so recht, gibts da evtl was besseres?

mood-indigo.org - Das unabhängige Silicon Graphics User Forum

Debuggen mit IRIX...
« am: 18. Januar 2003, 18:39:37 »

majix

  • Gast
Re: Debuggen mit IRIX...
« Antwort #1 am: 18. Januar 2003, 21:12:18 »
Einen guten Debugger (bzw Frontend für gdb) habe ich mit ddd gefunden.

Aber trotzdem habe ich große Probleme: Sobald ich mein Programm starte, erscheint bei gdb die Meldung:
Warning: Signal ? does not exist on this system.

Und dann steht der Debugger :( Was möchte mir diese Meldung sagen?

Beim Linken bekomme ich auch folgende Warnungen:

ld32: WARNING 85: definition of __dynamic_cast in /usr/freeware/lib32/libstdc++.a(tinfo.o) preempts that definition in /usr/lib32/libC.so.2.
ld32: WARNING 127: Two shared objects with the same soname, /usr/lib32/mips3/libm.so and /usr/lib32/libm.so, have been been linked. This is probably due to a missing -L specification. Ignoring the latter.
ld32: WARNING 127: Two shared objects with the same soname, /usr/lib32/mips3/libm.so and /usr/lib32/libm.so, have been been linked. This is probably due to a missing -L specification. Ignoring the latter.

Welche der LIBs ist denn die richtige? Und wie sage ich das dem Linker/Compiler?

Offline sgt_barnes

  • Mood Master
  • ****
  • Beiträge: 250
  • Der frühe Vogel fängt den Wurm, aber die zweite Maus kriegt den Käse!
    • Profil anzeigen
Re: Debuggen mit IRIX...
« Antwort #2 am: 19. Januar 2003, 00:03:52 »
Mit "-L<pfad>" kann man ein Verzeichnis angeben, in dem der Linker zuerst mal nach den angegebenen Bibliotheken suchen soll.

Wenn Du also die libm.so aus dem Verzeichnis /usr/freeware/lib32/ nehmen willst, schreibst Du einfach "-L/usr/freeware/lib32" vor Deine ganzen -lsonstwas.

In den "lib32"-Verzeichnissen sind Bibliotheken für n32-Executables. In denen mit einfach nur "lib" stehen normalerweise die o32-Bibliotheken.

Debuggen mit den Kommandozeilendebuggern wie dbx oder gdb ist nicht so schwierig, wie es aussieht:

"where" macht einen stack-trace und "list" zeigt die paar Zeilen um die aktuelle Position an. Mit "step" kann man eine Zeile vor, "stop at <Zeilennummer>" setzt einen Breakpoint und "run" startet den gecrashten Prozess von vorn. "help" listet alle Kommandos auf und "help <Kommando>" liefert eine Beschreibung für das Kommando.

Ein Beispiel:


bash-2.04$ dbx crasher
dbx version 7.2.1 Mar 13 1998 19:00:36
Core from signal SIGSEGV: Segmentation violation
(dbx) where
>  0 main(argc = 1, argv = 0x7fff2f24) ["/usr/people/tkrueger/data/source/crasher/crasher.c":5, 0x10000fb4]
  1 __start() ["/xlv55/kudzu-apr12/work/irix/lib/libc/libc_n32_M3/csu/crt1text.s":17
7, 0x10000e50]
(dbx) list
>*   5          (*p)++;
    6          
    7          return 0;
    8  }
(dbx) print p
(nil)


Wie man sieht ist mein Programm in der Funktion "main" in Zeile 5 abgestürzt, weil es versucht hat den NULL-Zeiger p zu dereferenzieren.

Das sollte reichen, um rauszufinden, wo die Sache in die Hose geht. ;)

Tilmann



Anhang 1: crasher.c


int main (int argc, char *argv [])
{
     int *p = 0;
     
     (*p)++;
     
     return 0;
}


Anhang 2: Kompilierungskommando

gcc -g crasher.c -o crasher


majix

  • Gast
Re: Debuggen mit IRIX...
« Antwort #3 am: 19. Januar 2003, 00:41:35 »
Mit den Linkerpfaden hab ichs mittlerweile auch hingekriegt, allerding bleibt immer noch die erste Warnung stehen - und das obwohl ich gar nicht die /usr/freeware/lib32 Bibliotheken angegeben habe. Evtl verwendet gcc die automatisch?

Vielen Dank, ich habe jetzt auch mal dbx getestet, das funktioniert wesentlich besser als gdb. Damit finde ich jetzt wenigstens meine Fehler, und es kommt auch mit pthreads klar - von denen mache ich massiv gebrauch.

Offline sgt_barnes

  • Mood Master
  • ****
  • Beiträge: 250
  • Der frühe Vogel fängt den Wurm, aber die zweite Maus kriegt den Käse!
    • Profil anzeigen
Re: Debuggen mit IRIX...
« Antwort #4 am: 20. Januar 2003, 11:47:18 »
pthreads: Richtig! Jetzt fällts mir wieder ein! Genau das war der Grund, warum ich den gdb unter IRIX nicht benutze! Unter Linux nehm ich den ja auch! Aber ich konnte irgendwie halt nicht erklären, warum ich unter IRIX den dbx nehme...

libstdc++: Ja, die linkt der gcc automatisch dazu. Warum er allerdings auch der Meinung ist, die andere libC (das gleiche von sgi) einbinden zu müssen, ist mir nicht klar. Eventuell hilft ein
ldd <executable>
um rauszufinden, was der dynamische Linker so alles einbindet.

Ich guck heute Abend mal, was da bei mir so alles drinsteht und melde mich dann wieder.

Schönen Tag noch,
Tilmann

majix

  • Gast
Re: Debuggen mit IRIX...
« Antwort #5 am: 21. Januar 2003, 14:26:59 »
Aber so richtig komfortabel ist dbx mit ddd auch nicht, ddd funktioniert mit gdb auch besser, nur gdb kommt mit meinem Programm nicht klar.

Sowas Geniales wie den Debugger von MS in Visual C++ gibts wohl nicht? Gibts bei den MIPS-Compilern evtl einen solchen Debugger?

Mittlerweile komme ich zwar halbwegs klar, aber der Komfort ist wirklich weit von den MS-Tools entfernt. :/

rob_gester

  • Gast
Re: Debuggen mit IRIX...
« Antwort #6 am: 21. Januar 2003, 15:29:53 »
kann mich erinnern, dass der komerzielle c-compiler von sgi noch vor jahren jede menge grafischen tools hatte, performance tuning, debugging u.v.m. haben wirklich toll ausgeschaut.
rob