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.
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.
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.
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.
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?"
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ß.
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.
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.