• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Cross-Debugging mit mehreren Prozessen

Phillinger

Member
Hi,

ich beschreibe wohl erst mal die Situation: Ich portiere eine Windwos-Software auf Linux. Diese soll sowohl auf x86-Systemen als auch auf einem Intel XScale-System (ARM-Architektur) laufen. Für letzteres ist logischerweise Cross-Compiling und -Debugging nötig. Das läuft soweit ja auch. Aber:

Ich nutze für die Threads Pthread-Bibliotheken, da diese für die meisten Architekturen vorhanden sind. Die Pthread-Implementierung für den XScale ist nun leider so geartet, das er keinen Thread sondern einen Prozess erzeugt. Das würde mich selbst ja nicht stören, leider bleibt der Debugger daran hängen (es handelt sich um den gdb). In der Dokumentation des GDB fand ich den Hinweis, daß man ja logischerweise nur den Eltern-Prozess debuggt.

Um sich mit dem Debugger auf den Kind-Prozess zu setzen solle man 'attach PID' nutzen. Trotz korrekter PID quittiert er dieses Kommando leider jedesmal mit "Don't know how to attach. Try "help target".".

"help target" brachte mich allerdings kein bisschen weiter, dort wird von attach nicht mal etwas erwähnt. Wie kann ich dem Debugger sagen, daß er den Kind-Prozess debuggen soll?
 

oc2pus

Ultimate Guru
4.9 Debugging programs with multiple threads
http://www.delorie.com/gnu/docs/gdb/gdb_25.html

und hier:
http://yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html#DEBUGGING

und evtl noch hier:
Debugging "C" And "C++" Programs Using "gdb"
http://users.actcom.co.il/~choo/lupg/tutorials/debugging/debugging-with-gdb.html
 
OP
Phillinger

Phillinger

Member
Danke für Links, leider treffen sie nicht ganz den Kern meines Problems: Threads zu debuggen ist kein Problem. Aber die pthread-Implementierung für die XScale-Architektur (zumindest die pthread-Bibliothek, die ich dafür nutze) erzeugt bei einem pthread_create einen Prozess, mit eigener PID und allem.

Einem "normalen" Thread (auf x86er) kann der gdb problemlos folgen, da er im selben Speicherbereich läuft, aber einen Prozesswechsel bekommt er nicht hin. Man müsste ihm explizit sagen, er soll sich auf diese PID draufhängen. Doch das tut er nicht.

Der erste Link ist ja das gdb-Handbuch, das habe ich schon. Daher habe ich auch den Hinweis gehabt, es mit attach PID zu versuchen. Klappte ja leider nicht.

Die anderen Links beziehen sich nur auf Threads, das ist ja wie gesagt aber nicht das Problem. Da ich mich mit Try&Error jetzt eh' schon fast durchgemogelt habe vielleicht nicht mehr sooo wichtig, aber es wäre schön zu wissen.
 
Oben