SYS_MON - Ein MONitor mit SYStem

Eigentlich gehöre ich nicht zu den Computerbesitzern, die jedes Programm, das ihnen in die Hände fällt, in ihre Programmsammlung einbeziehen. Vor einigen Wochen bin ich jedoch auf das Shareware-Programm SYS_MON gestoßen, das mir auf Anhieb interessant erschien. Inzwischen habe ich SYS_MON naher begutachtet - ich hatte mich nicht getäuscht.

Monitor-Galerie

SYS_MON ist in die Kategorie der sogenannten Monitorprogramme einzuordnen. Die Bezeichnung „Monitor“ bezieht sich in diesem Fall nicht auf das gleichnamige Ausgabegerät, sondern definiert einen speziellen Programmtyp. Ein Monitorprogramm ist in erster Linie dazu gedacht, Speicherbereiche anzuschauen und zu verändern. In der Regel geschieht dies mit gewissen Standardfunktionen. Hierzu gehören insbesondere die disassemblierte Darstellung, die Möglichkeit, den Speicher nach Byte-Folgen zu durchsuchen und gezielte Änderungen der Speicherinhalte durchzuführen.

Die meisten Monitore sind darüber hinaus in der Lage, Programme in Einzelschritten abzuarbeiten, was eine gute Hilfe bei der Fehlersuche darstellt. Man spricht in diesem Zusammenhang häufig vom Debugging (Entwanzen). Programme, die die Möglichkeit zum Debugging bieten, schimpfen sich Debugger. Programme dieser Art gibt es für den ST inzwischen einige. Mit SYS_MON kann man sie jedoch kaum vergleichen.

Der kleine Unterschied

Nein, es geht nun nicht um Werbung für Höschenwindeln, wir bleiben bei SYS_MON. Dieses Programm unterscheidet sich nämlich deutlich von den handelsüblichen Monitoren bzw. Debuggern. SYS_MON kann nicht disassemblieren. Auch kann man mit SYS_MON nicht den Speicher beliebig durchsuchen. Und Änderungen im Speicher durchzuführen, dürfte mit SYS_MON ebenfalls nicht gelingen.

Fehlen dem Programm also alle Standardfunktionen eines gewöhnlichen Monitors? Ich neige dazu, diese Frage mit „ja“ zu beantworten. Und gerade deshalb handelt es sich bei SYS_MON nicht um einen gewöhnlichen, sondern um einen ungewöhnlichen Monitor. Die Eigenschaften. mit denen SYS_MON aufwartet, sind speziell auf die Gegebenheiten von ST und TT-Systemen und den unter TOS bzw. GEM laufenden Programmen zugeschnitten. So erlaubt es SYS_MON, den Verlauf aller im Speicher vorhandenen Programme bis ins Detail zu überwachen und sich übersichtliche Informationen über sämtliche systeminternen Daten zu verschaffen.

Wachsam

Sie wollen wissen, welche Systemaufrufe in welcher Reihenfolge abgesetzt werden? Kein Problem. Ach so, es geht insbesondere um Aufrufe des AES. Und die übergebenen Parameter hätten Sie auch gerne. Ein Kinderspiel. Sollen nur Aufrufe überwacht werden, die von einem ganz bestimmten Programm getätigt werden? Geht alles. Was die Überwachung des Systems betrifft, hat SYS_MON nämlich wirklich den Durchblick.

Jeder einzelne Aufruf des Betriebssystems wird von SYS_MON erkannt und auf dem Bildschirm samt Parameter angezeigt. Dies geschieht nicht nur in dezimaler oder hexadezimaler Form, sondern vielfach auch im Klartext. Alle Ausgaben können in eine Datei oder auf eine beliebige Schnittstelle umgelenkt werden. Eine SYS_MON-Sitzung kann also ohne Schwierigkeiten auf einem Drucker protokolliert werden. Eingaben können nicht nur über die Tastatur, sondern auch über eine Schnittstelle erfolgen.

Bei der Überwachung der Systemroutinen kann ausgewählt werden, welche Aufrufe kontrolliert werden sollen. So kann man SYS_MON mitteilen, daß man nur an AES-Aufrufen interessiert ist und auch nur dann, wenn sie aus einem bestimmten Programm heraus erfolgen. In diesem Fall listet SYS_MON nur diejenigen Aufrufe, die von eben diesem Programm ausgehen.

Programmanalyse

Mit SYS_MON ist es möglich, interessante Aussagen über die Funktionsweise eines Programms zu erhalten. Angaben über die Reihenfolge, in der gewisse Systemfunktionen durch eigene oder fremde Programme aufgerufen werden, lassen diverse Rückschlüsse zu. So kann man durch diese Daten in manchen Fällen erfahren, warum Programm X sich nicht mit Programm Y verträgt. Überflüssige Aufrufe in eigenen Programmen können leicht entdeckt werden. Folgt beispielsweise direkt nach einem Befehl zum Abschalten der Maus ein Aufruf zum Einschalten des Maus-Cursors, ist dies ein Hinweis darauf, daß möglicherweise noch optimiert werden kann.

Wie sieht nun ein SYS_MON-Protokoll aus? Abbildung 1 zeigt das Protokoll einer Desktop-Aktion: SYS_MON dokumentiert hier das Öffnen und Schließen der Alarmbox „Arbeit sichern?“.

Auch bei der Fehlersuche in residenten Programmen bietet SYS_MON eine wertvolle Hilfestellung. Residente Routinen (also auch Accessories!) mit herkömmlichen Debuggern zu untersuchen, ist in vielen Fällen nicht möglich. SYS_MON ist hier immerhin in der Lage, den Programmverlauf anhand von Systemaufrufen zu dokumentieren. Abbildung 2 verdeutlicht dies am Beispiel eines Accessories, das unter dem Programmnamen „PROTECT.ACC“ gestartet wurde. Dokumentiert wird das Aufrufen und Verlassen des Accessory -Dialogs. SYS_MON wurde für dieses Beispiel so konfiguriert, daß ausschließlich Aufrufe des AES protokolliert wurden.

Da kaum ein Programm ohne irgendwelche Systemaufrufe auskommt, lassen sich so in vielen Fällen Rückschlüsse auf Fehlerursachen ziehen.

*****************************************************************
*
* This file was created by SYS_MON, the ATARI ST System Monitor,
* copyright by Karsten Isakovic, Berlin
*
* It is forbidden to publish this file or extracts of it without
* the copyright header !
*
GEM     vq_key_s        H 1 -> { }
GEM     vsin_mode       H 1 Keybd Sample -> Sample
GEM     vrq_string      H 1 Max -1 Echo 0 (177,1 ) -> "" Ret 0
GEM     v_hide_c        H 1 ->
GEM     vro_cpyfm       H 1 Mode 3 MFDB $0000E12C MFDB $0000E18C (192.146) (447,271) to (0 ,0 ) (255,125) ->
GEM     v_show_c        H 1 ->
GEM     vs_clip         H 1 On (201,146) (438,271) ->
GEM     v_hide_c        H 1 ->
GEM     vswr_mode       H 1 Replace -> Replace
GEM     v_pline         H 1 Cnt 5 (204,149) (435,149) (435,268) (204,268) (204,149) ->
GEM     vsf_color       H 1 0 -> 0
GEM     vsf_inter.      H 1 None -> None
GEM     vsf_style       H 1 0 -> 0
GEM     vr_recfl        H 1 (205,150) (434,267) ->
GEM     vswr_mode       H 1 Transparent -> Transparent
GEM     vswr_mode       H 1 Replace -> Replace
GEM     v_pline         H 1 Cnt 5 (201,146) (438,146) (438,271) (201,271) (201,146) ->
GEM     vsl_color       H 1 0 -> 0
GEM     v_pline         H 1 Cnt 5 (203,148) (436,148) (436,269) (203,269) (203,148) ->
GEM     v_pline         H 1 Cnt 5 (202,147) (437,147) (437,270) (202,270) (202,147) ->
GEM     vrt_cpyfm       H 1 Mode 2 MFDB $0000E12C MFDB $0000E16C Col (1 ,0 ) (0,0) (31 ,31 ) to (212,165) (243,196) ->
GEM     vswr_mode       H 1 Transparent -> Transparent
GEM     v_gtext         H 1 (252,165) "Arbeit sichern?" ->
GEM     vswr_mode       H 1 Replace -> Replace
GEM     vsl_color       H 1 1 -> 1
GEM     v_pline         H 1 Cnt 5 (225,242) (310,242) (310,263) (225,263) (225,242) ->
GEM     v_pline         H 1 Cnt 5 (226,243) (309,243) (309,262) (226,262) (226,243) ->
GEM     v_pline         H 1 Cnt 5 (227,244) (308,244) (308,261) (227,261) (227,244) ->
GEM     v_pline         H 1 Cnt 5 (228,245) (307,245) (307,260) (228,260) (228,245) ->
GEM     vsf_color       H 1 0 -> 0
GEM     vr_recfl        H 1 (228,245) (307,260) ->
GEM     vswr_mode       H 1 Transparent -> Transparent
GEM     v_gtext         H 1 (244,258) " OK " ->
GEM     vswr_mode       H 1 Replace -> Replace
GEM     v_pline         H 1 Cnt 5 (322,243) (405,243) (405,262) (322,262) (322,243) ->
GEM     v_pline         H 1 Cnt 5 (323,244) (404,244) (404,261) (323,261) (323,244) ->
GEM     v_pline         H 1 Cnt 5 (324,245) (403,245) (403,260) (324,260) (324,245) ->
GEM     vsf_color       H 1 0 -> 0
GEM     vr_recfl        H 1 (324,245) (403,260) ->
GEM     vswr_mode       H 1 Transparent -> Transparent
GEM     v_gtext         H 1 (328,258) " Abbruch " ->
GEM     v_show_c        H 1 ->
GEM     A_INIT          -> Vars $00003930 Fonts $0002C3AE List $0002C32E
GEM     v_hide_c        H 1 ->
GEM     vsc_form        H 1 0 ->
GEM     v_show_c        H 1 ->
GEM     vs_clip         H 1 On (0 ,19 ) (639,399) ->
GEM     vq_key_s        H 1 -> { }
GEM     vsin_mode       H 1 Keybd Sample -> Sample
GEM     vrq_string      H 1 Max -1 Echo 0 (0 ,19 ) -> "" Ret 0
GEM     vq_key_s        H 1 -> { }
GEM     vsin_mode       H 1 Keybd Sample -> Sample
GEM     vrq_string      H 1 Max -1 Echo 0 (0 ,19 ) -> "\cr" Ret 1
GEM     vq_key_s        H 1 -> { }
GEM     vsin_mode       H 1 Keybd Sample -> Sample
GEM     vrq_string      H 1 Max -1 Echo 0 (0 ,19 ) -> "" Ret 0
*
* End of SYS_MON file. 
*****************************************************************

Abb. 1: SYS_MON protokolliert "Arbeit sichern?"

Informativ

Nicht nur zur Programmüberwachung ist SYS_MON geeignet. Das Programm stellt in speziellen Dialogen umfangreiche Angaben über das System zur Verfügung, die sich sonst nur mühsam in Erfahrung bringen lassen. Seien es Daten über installierte Fonts, den cookie jar. Systemvariablen, Speicherbelegung.... Es ist völlig sinnlos, diese Liste fortzusetzen, denn das würde den Rahmen dieser Ausgabe sprengen (jedenfalls nahezu).

Häufig erhalt man diese Angaben im Klartext, so daß man sich nicht durch irgendwelche Hexzahlen wühlen muß.

Ich kombiniere...

Eingangs habe ich bereits darauf hingewiesen, daß SYS_MON nicht in der Lage ist, Programme zu disassemblieren oder in Einzelschritten abzuarbeiten, kurzum, als Debugger zu fungieren. Der Autor hat jedoch an die Möglichkeit gedacht, diese Aufgaben an geeignete Programme zu deligieren. So kann SYS_MON ein zu überwachendes Programm bei einem bestimmten Systemaufruf anhalten und dann den residenten Debugger TEMPLMON aufrufen. Dieser stellt nun diejenigen „ordinären“ Funktionen zur Verfügung, die nicht in SYS_MON integriert sind. Im Zusammenspiel beider Programme ergeben sich also neue Möglichkeiten, Abstürzen und sonstigen Fehlern in eigenen Programmen den Garaus zu machen.

Flexibel

Erfreulich, daß SYS_MON nicht nur auf dem ST, sondern auch ohne Einschränkungen auf dem TT eingesetzt werden kann. Dabei war es für mich eine angenehme Überraschung, daß SYS_MON in der Lage ist, spezielle Eigenschaften der Hard- und Software des TT zu erkennen und zu nutzen. So zeigt SYS_MON bei der Auswertung der Speicherbelegung sowohl Angaben für das ST- als auch für das TT-RAM an.

Obwohl SYS_MON sich in die verschiedensten Systemvektoren einklinkt, konnte ich keinerlei Unverträglichkeiten mit anderen Programmen feststellen. Es war stets möglich, den residenten SYS_MON aufzurufen und nach dem Verlassen im alten Programm weiterzuarbeiten. Auch in Verbindung mit Programmen, die sich selber ins System einklinken. arbeitete SYS_MON fehlerfrei. So gab es auch mit BELAs NVDI keine Schwierigkeiten. Selbst die Statistik über die VDI-Aufrufe wurde von SYS_MON weiterhin korrekt geführt.

*****************************************************************
*
* This file was created by SYS_MON, the ATARI ST System Monitor,
* copyright by Karsten Isakovic, Berlin
*
* It is forbidden to publish this file or extracts of it without
* the copyright header !
*
PROTECT     graf_mouse  ARROW $0003DEF4 ->
PROTECT     form_center $0003D9A4 -> (165,54 ) (310,310)
PROTECT     form_dial   START (165,54 ) (310,310) TO (0,0 ) (0,0 ) -> 1
PROTECT     objc_draw   $0003D9A4 Start 0 Depth 2 (165,54 ) (310,310) -> 1
PROTECT     form_do     $0003D9A4 0 -> 22
PROTECT     form_dial   FINISH (165,54 ) (310,310) TO (165,54 ) (310,310) -> 1
PROTECT     objc_change $0003D9A4 22 (165,54 ) (310,310) NORMAL 0 -> 1
*
* End of SYS_MON file.
*****************************************************************

Abb. 2: Ein Accessory-Aufruf

Zu SYS_MON gehört neben einer Handbuchdatei auch eine Datei im TEX-Format. Wer sich nicht mit einem einfachen Ausdruck einer ASCII-Datei zufriedengeben will, erhalt mit der TEX-Datei die Möglichkeit, ein anspruchsvolleres Handbuch auszudrucken.

Leider gibt die Programmbeschreibung zu SYS_MON kaum Aufschluß über die möglichen und vielfältigen Einsatzgebiete des Programms. Es werden lediglich die einzelnen Funktionen und die Programmbedienung beschrieben. Welche Aktionen sich mit Hilfe von SYS_MON durchführen lassen, wird nur unzureichend beschrieben. Immerhin werden einige Möglichkeiten des Programms anhand einer Beispielsitzung dargestellt. Es wäre wünschenswert, das Handbuch um einen umfangreichen praktischen Teil zu ergänzen. Dann würde nicht nur das Programm selbst, sondern auch die Dokumentation professionellen Ansprüchen genügen. Laut Autor wird bereits an einer erweiterten Programmbeschreibung gearbeitet, die in Kürze erhältlich sein soll.

Alles in allem kann ich SYS_MON jedem Systemprogrammierer nur empfehlen. Das Programm kann gegen Einsendung einer Leerdiskette und eines frankierten Rückumschlags bezogen werden bei:

Karsten Isakovic
Wilmersdorfer Straße 82
W-1000 Berlin 12

SYS_MON ist Shareware, die Nutzungsgebühr beträgt 50 DM. Für kommerzielle Nutzer beträgt die Shareware-Gebühr 100 DM. In diesem Betrag ist auch ein Update-Service enthalten.

Eine Bemerkung möchte ich noch loswerden: Wenn sich auch SYS_MON in vielen Punkten von anderen Monitoren unterscheidet, eines verbindet alle diese Programme: Sie sind in erster Linie für den fortgeschrittenen Programmierer gedacht.


Uwe Seimet
Aus: ST-Computer 06 / 1991, Seite 42

Links

Copyright-Bestimmungen: siehe Über diese Seite