amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > AROS und Amiga-Emulatoren > WinUAE debugger [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

13.11.2007, 12:23 Uhr

selco
Posts: 64
Nutzer
Hallo,
ich versuche mich am Debugger von WinUAE 1.4.4...

Mit Shift F12 öffnet sich das Debugger-Fenster. Ok.

Jetzt Kann ich mit T die Prozesse auflisten lassen. Ok.

Nun würde ich gerne in einem bestimmten Prozess anhalten, um genau den zu debuggen. Wie mache ich das???

fp "prozessname" scheint nicht zu das zu bewirken, was ich möchte. Der UAE läuft dann wieder und ich komme nie wieder in den Debugger.

Wenn ich im Debugger ein g eintippe, läuft der Emulator ja weiter. Kann ich dann irgendwie den Emulator wieder anhalten und zurück in den Debugger kommen?

MfG selco
http://selco.da.ru


[ - Antworten - Zitieren - Direktlink - ]

15.11.2007, 13:48 Uhr

Holger
Posts: 8081
Nutzer
Zitat:
Original von selco:
fp "prozessname" scheint nicht zu das zu bewirken, was ich möchte. Der UAE läuft dann wieder und ich komme nie wieder in den Debugger.

Hab ich gerade mal ausprobiert. Bei mir stoppt der Debugger durchaus, wenn der betroffene Task aktiv wird. Das Problem ist, dass nicht jeder Task wirklich aktiv ist, er muss ja den Status RUNNING besitzen, um unterbrochen werden zu können. Aber es scheint auch so manchmal nicht zu funktionieren.
Zitat:
Wenn ich im Debugger ein g eintippe, läuft der Emulator ja weiter. Kann ich dann irgendwie den Emulator wieder anhalten und zurück in den Debugger kommen?

Abgesehen von der nicht immer funktionierenden fp-Variante, würde ich sagen, mit derselben Taste, mit der Du den Debugger das erste Mal aufgerufen hast, oder wie war die Frage gemeint?

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

15.11.2007, 14:12 Uhr

bernd_roesch
Posts: 364
[Benutzer gesperrt]
für den debugger sollte der JIT aus sein, oder man muss darauf achten den breakpoint immer auf einen sprungbefehl zu setzen (jsr bsr) und der JIT sollte hardflush an haben.

ansonsten wenn du code selber geschrieben hast der in ner boopsi klasse ist oder sonstwie looks hat interrupt code, kannst du besser den hrtmon nutzen der eingebaut ist.(mit bild open starten) und debug eintippen.nun mit x beenden.


dazu kompilierst du in dein programm nen illegal befehl ein.per C geht das so

irgendwo im headerfile(in AFA OS sind die defines drin)

#define ILLEGAL __asm__("illegal");

nun kannst du an der stelle an der du stoppen willst ILLEGAL reinschreiben und wenn die stelle ausgeführt wird, springt das programm in den debugger.dan überspringst du den illegal befehl und kannst simglesteppen

wenn du ein systemkonformes Program hast, kannst den grafischen asm debugger barfly nehmen.

der kann auch gcc sourcelevel files einladen(gcc debug build erstellen).da kannste dann komfortabler debuggen, breakpoint nach c source setzen etc


[ Dieser Beitrag wurde von bernd_roesch am 15.11.2007 um 14:13 Uhr geändert. ]

[ Dieser Beitrag wurde von bernd_roesch am 15.11.2007 um 14:15 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

19.11.2007, 09:00 Uhr

selco
Posts: 64
Nutzer
Hallo,
danke für Eure Antworten!

@Holger:
Klar, er muß Running sein. Darauf habe ich geachtet. Ich habe inzwischen auch mit fp einen Task erfolgreich angehalten. Dazu hatte ich mein Testprogramm von der Workbench gestartet. Dann ist der Name des Tasks (den ich bei fp eingeben muß) ja auch gleich dem Programmnamen.

Welchen namen muß ich denn aber nun eingeben, wenn das Programm von der Shell aus gestartet wurde?

Ich frage, weil es eben bisher nie funktioniert hat und der unter "T" angezeigte Name ein anderer ist als der, den ich z.B. mit Scout sehe.

Shift-F12 UAE-Debuger:
106D8E30: 00000000 PROCESS 'Shell Process' [4, 'Work:PROGRAMME/HRTMON_Test/test1/test1']

Scout:
$106D8E30 Shell Process [Work:PROGRAMME/HRTMON_Test/test1/test1]

Was muß ich denn nun nehmen? Gehört Shell Process zum Namen dazu oder nicht? Was ist mit der 4 oder den []?

Wenn ich fp mit address benutzen möchte, welche Adresse muß ich dann nehemen? Die 106D8E30? Was steht auf dieser Adresse eigentlich?

Wenn ich den Debugger mit g weiterlaufen lasse, komme ich mit erneutem Shift F12 wieder in den Debugger rein. FUnktioniert. Keine Ahnung, was ich beim ersten Mal da falsch gemacht habe.


@bernd_roesch:

Auf die Bedeutung von "Debug" im HRT-Mon war ich nicht gekommen, Danke!

#define ILLEGAL __asm__("illegal");

Gibt es eine solche Möglichkeit auch mit SAS/C? (Ich habe es auf Deinen illegal-Vorschlag mit einer Division durch Null versucht, das geht auch, aber einen Illegal-Anweisung wäre schöner...

Ich habe den Eindruck, daß debug nur einmal funktionert. Nach meiner Division durch Null kam ich im HRTMON an die Stelle. Wenn ich mein Testprogramm ein zweites Mal starte, kommt ein Softwar -Fehler, obwohl Debug noch eingeschaltet ist. Bei mir muß man es anscheinend aus und wieder einschalten, damit es funktioniert?...


MfG selco
http://selco.da.ru

[ - Antworten - Zitieren - Direktlink - ]

19.11.2007, 14:57 Uhr

Holger
Posts: 8081
Nutzer
Zitat:
Original von selco:
Welchen namen muß ich denn aber nun eingeben, wenn das Programm von der Shell aus gestartet wurde?

Ich frage, weil es eben bisher nie funktioniert hat und der unter "T" angezeigte Name ein anderer ist als der, den ich z.B. mit Scout sehe.

Shift-F12 UAE-Debuger:
106D8E30: 00000000 PROCESS 'Shell Process' [4, 'Work:PROGRAMME/HRTMON_Test/test1/test1']

Scout:
$106D8E30 Shell Process [Work:PROGRAMME/HRTMON_Test/test1/test1]

Was muß ich denn nun nehmen? Gehört Shell Process zum Namen dazu oder nicht? Was ist mit der 4 oder den []?

Ganz anders.
Der Task/Process-Name ist "Shell Process". Die anderen Informationen, also DOS-Prozessnummer und Name des laufenden Befehls stammen aus der erweiterten Struktur des Tasks und sind nicht Bestandteil des Namens. Deshalb formatiert jeder Debugger/Monitor diese Informationen so, wie er es für richtig hält.

Wenn Du allerdings fp "Shell Process" benutzt, versucht er, irgendeinen Shell-Prozess zu stoppen, was mit Sicherheit der falsche, und wahrscheinlich einer, der nicht aktiv ist, sein wird.

Zitat:
Wenn ich fp mit address benutzen möchte, welche Adresse muß ich dann nehemen? Die 106D8E30? Was steht auf dieser Adresse eigentlich?

Ja. Nimm einfach fp 106D8E30. Das ist die Adresse der Task-Struktur.

Zitat:
#define ILLEGAL __asm__("illegal");

Gibt es eine solche Möglichkeit auch mit SAS/C? (Ich habe es auf Deinen illegal-Vorschlag mit einer Division durch Null versucht, das geht auch, aber einen Illegal-Anweisung wäre schöner...


Mit den Assembler-Inlines von SAS/C kenne ich mich nicht aus. Aber folgendes C-Programm sollte eigentlich mit allen 68k-C-Compilern funktionieren.
C code:
#include <exec/types.h>
#include <stdio.h>

static const ULONG illegalBin=0x4AFC4E75;
typedef void (*SimpleFunc)();
const SimpleFunc illegal=(SimpleFunc)&illegalBin;

int main(int argc, char**argv)
{
  printf("before illegal\n");
  illegal();
  printf("after illegal\n");
  return 0;
}


Da dies kein Inline-Assembler, sondern eine Funktion ist, steht hinter dem illegal immer ein rts, das ausgeführt werden muss, um zu der Stelle zu gelangen, an der man den illegal() Aufruf eingebaut hat.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > AROS und Amiga-Emulatoren > WinUAE debugger [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2021 by amiga-news.de - alle Rechte vorbehalten.
.