Short: Powerful debugger/system monitor Architecture: m68k-amigaos feature list ------------ o Fullscreen debugger o Full symbolic debugging o Very powerful tracing and breakpoint commands. You can trace until a certain condition becomes true, or trace just before the next branch, or trace until a certain register changes, ... PowerVisor has profiler breakpoints, conditional breakpoints and a lot more o Primitive source level debugging (C, assembler, ...) In future more will be possible o PowerVisor is compatible with the 68000, 68020 and 68030. The 68040 is also supported (in the disassembler for example) although some features don't work on that processor (like memory protection) due to lack of information o Memory protection system. With this system you can read or write protect ranges of memory for all or some tasks o PowerVisor can show the MMU registers and special 68020/30 registers o Primitive floating point support (display and modify registers). In future more will be possible (like expressions) o Powerful ARexx interface o Intuition menus and gadtools scrollbars (AmigaDOS 2.0 version only) o The PowerVisor screen is a public screen (only for AmigaDOS 2.0) o Powerful expression evaluator. Almost all C operators are supported and some additional operators as well o Online help system with AmigaGuide or MultiView (for AmigaDOS 3.0) or internal system o Very customizable: screen or window on WorkBench, fonts, colours, menus, multiple windows, ... You can add your own PowerVisor commands with aliases All keys can be redefined and you can add macros or commands to any key you want o You can call any library function you want from within PowerVisor. With this feature you can test existing library functions or you can test your own libraries o Powerful stack usage checker. With this command you can see how much stack a program uses o Resource tracker. With this command you can see how much memory a program allocates (and how much memory it doesn't deallocate), all allocated signals, all locks and open files o Profiler. With this system you can see which routines use much CPU time and are useful to optimize o Crash trapping o You can kill and freeze tasks o Powerful tag and structure system. With this system you can define structures in PowerVisor. The disassembler will recognize these structures if possible and it will use names for all offsets instead of numbers. This makes debugging a lot easier o PowerVisor can list almost anything: tasks, libraries, devices, ports, resident modules, autoconfig devices, dos devices, windows, screens, fonts, ... In addition PowerVisor can dump the internal structures of many operating system elements like tasks, processes, CLI structures, ... o You can open any Exec device from within PowerVisor and send commands to it. This is useful for debugging your own devices o You can monitor the usage of a library function. Each time the library function is called PowerVisor will perform some action (like printing a message, or storing the information from the call in a buffer, or simply blinking the powerled) o PowerVisor can list the gadgets of a window o PowerVisor can remove a lot of things like tasks, resident modules, input handlers, windows, screens, ... - New '#' operator to get the address for a linenumber in the currently loaded source - It is now possible to issue ARexx commands to PowerVisor even when PowerVisor is in hold mode - The speed of PowerVisor output has been greatly enhanced. I don't use RawDoFmt anymore for the conversion of an integer to a hexadecimal string. The speed difference is very large with the 'memory' command - Better floatingpoint support with 'fregs' and 'float' - The complete documentation has been converted to AmigaGuide (© Commodore) format. There are four new standard alias commands provided for easy access to the documentation from within PowerVisor. With 'ahelp' you simply go to the main screen, with 'cmdhelp' you can ask help about any command, with 'funhelp' you can ask help about any function and with 'index' you can search any topic you want in the complete PowerVisor hypertext manual. Note that you need AmigaGuide to be able to use these four new aliases - New install script for AmigaDOS 2.0 which makes use of the wonderful 'Installer' program (© Commodore). It is highly recommended that you install PowerVisor with this script (if you have AmigaDOS 2.0 of course) - Instead of \0a it is now possible to use \n. This is more intuitive - New 'appendto' command to append the output of a command to a file. This new command is completely equivalent to the 'to' command except that the output is appended to a (possibly) existing file - Four new aliases in 's:pv/ExtraAliases': 'm0', 'm1', 'v0' and 'v1'. With these aliases you can go back with 'memory' and 'view' - The restriction that there can only be one PowerVisor in memory at the same time is removed. You can now run as many instances of PowerVisor as you wish (and as memory permits). However, only the first (the master) PowerVisor traps crashes and allows debugging. The name of the ARexx port, the PowerVisor port, the input handler and the public screen are extended with a dot ('.') and the number of the slave (starting with 1). The master instance does not have this extension - New 'pv' constant to ask the number of the PowerVisor instance (0 = master, 1 = first slave, ...) - New 'pubscreen' function to get the name of the public screen for this instance. Very useful for ARexx scripts - New 'arexxport' function to get the name of the ARexx port for this instance. Very useful for ARexx scripts - New '-c' commandline option to skip the reading of the PowerVisor-config file. PowerVisor uses all the default values - New '-s' commandline option to skip the reading of the PowerVisor-startup script - New 'a' option for 'attach' so that a command is always executed (invisible) even if PowerVisor is busy doing something else - The 'string' command has a new optional argument for the maximum length of the returned string - New 'getline' function to get the pointer to the line on the current position - Added new hilighting technique to the window system: inverse video - New 'ListEnv.pv' script for a specialized list environment (see the script for more information) - New \01, \02, \03 and \04 characters useful for hilighting text on the PowerVisor window - New optional argument for 'debug n' and 'debug c'. Normally those two commands waited for the next process or task. With this optional argument you can wait for the n'th process or task with n greater than 1. This is useful if you want to debug a task that is started immediately after a certain program runs (for example) - The 'stru' list (the list containing all structure definitions) now always contains some structures that were already present in PowerVisor but not accessible until now. You can now use 'peek' and 'apeek' to read or write values in the standard structures (like 'task', 'proc', 'cli', 'wins', ...) - MAJOR MAJOR MAJOR MAJOR!!!!!!!!!!!!!!!!!!!!!!! AT LAST! The MMU memory protection system is here and it even works! All you need is a 68020 with a 68851 or a 68030 (at this moment the 68040 is not supported) and you can use this extremely powerful feature. You can protect any region of memory for write access or for read access - The new MMU memory protection system uses the already existing tag system to describe the protected regions. The 'addtag' command has been extended to allow for extra protection flags for a region of memory. The 'tags' command has been extended to show these extra flags - New 'watch' command to enable the new memory protection system. This command also moves the VBR to another position so that writing in low memory is not as harmful anymore - New 'protect' command to protect memory according to the current tag list. Use this command in combination with 'watch' - New 'getmmuentry' function for some specialized control over the new MMU features - Three new scripts ('ProtectRCustom', 'ProtectWCustom' and 'StopCustom') to protect illegal custom chip access. These scripts make use of the new memory protection system - New 'tagtype' command. With this command you can assign a certain tag list for the protection of one task only. In this manner you can protect regions for one task but not for the others, or you can have other protection characteristics for each task. For example: task 1 may write on some region but can't read while another task can read but not write on the same region (or part of it) - Disassembler is a bit faster (10000 instructions disassemble in 35 seconds instead of 46 (still no blazing speed however)) - MAJOR: Disassembler understands tags and structures when you are debugging (in the debug display). An example: If a1 contains a pointer to a structure in memory and there is a tag for this memory that defines the structure, then the instruction: MOVE.L (,A1),D0 will automatically be disassembled as: MOVE.L (,A1),D0 The only thing you need to do to get this feature is to load all needed structures with 'addstruct' and define your memory regions with 'addtag' - There is also a new 'TypeMemory' script that defines tags for some standard structures - New 'struct' command. With this command you can make and change structures in an interactive way. This is VERY useful in combination with the tag system and the structure offset disassembly mentioned above. You can also save the newly made structures. So you don't have to use 'mstruct' (external utility) anymore to make a simple structure you were only going to use once anyway - The loading of symbols is a LOT faster. Loading 1850 symbols used to take about 34 seconds. Now it only takes 3 seconds! - All PowerVisor windows now share the same port. This means that you can open as many windows as memory permits. There is no longer a limit of five windows - Added '_node' standard structure to the 'stru' list - New 'fd6' alias in 's:pv/ExtraAliases' to load the fd-file corresponding to the library currently in @a6 (while debugging) - Totally new internal memory mamagement system. advantages : o No more MungWall hits o Slightly faster o Compatible with all possible future operating systems (this was not completely the case for the previous memory management system) disadvantages o PowerVisor uses somewhat more memory - New 'pvmem' command to see how PowerVisor uses memory (only useful for PowerVisor debugging purposes) - PowerVisor detaches from the CLI (only if you have AmigaDOS 2.0 or higher) - New commandline option '-d' to disable detaching - New 'a' option in 'source' command. With this option you can show the source starting with another label - New 'h' option in 'source' command. With this option you can lock the source logical window. When this is done, the source will no longer follow the program counter - 'refresh' (with the 'refresh' command) will from now on also work when you have activated another PowerVisor (or physical) window. You need not activate the 'Main' physical window anymore (Note! This is only true while another POWERVISOR window is active) - New support for scrollbars (with GadTools, so this feature only works for the AmigaDOS 2.0 version) in logical windows so that you can scroll in the window with the mouse. This feature is disabled by default. Use 'mode sbar' to enable it (and 'mode nosbar' to disable it again) - New flags in logical window for scrollbars - The 'Source' logical window has seperate scrollbar handling routines. Instead of scrolling the logical window, the scrollbar in the 'Source' logical window scrolls in the loaded file - The 'Source' logical window always has a scrollbar (note that you can change this with the 'prefs' command). NOTE! This feature is NOT true if you still work with an old 'PowerVisor-config' file. Delete this file (or use 'prefs logwin ...' and 'saveconfig' manually if you have an old (pre-V1.40) configuration file - The 'Debug' and 'Source' logical windows now refresh correctly in all circumstances - 'pvcall 65' is obsolete and is replaced by an equivalent, but less powerful, routine (so scripts using 'pvcall 65' will not crash) - New powerful 'prof' command for profiling. With this command you can monitor a task you are debugging. Using this feature you can choose which routines are candidates for optimization - New 'debug q' option to prevent a debug task from quiting. This is useful in combination with the profiler. Normally when a debug tasks quits, all symbols are removed. All information in the profiler table would loose its meaning. To prevent this you can use 'debug q' - New 'AllocSignal', 'CreateMsgPort', 'CreateIORequest', 'Lock', 'UnLock', 'Open', 'Close', 'OpenFromLock', 'DupLock', 'DupLockFromFH', 'AllocRaster' and 'FreeRaster' patches in 'track' command (resource tracker) - Bug fix: it was not possible any more to run more than two instances of PowerVisor at the same time - Bug solved in the AmigaDOS 1.3 version of PowerVisor: the 'stack' and 'prof' commands probably never worked at all! I never tested these two commands in AmigaDOS 1.3. The bug is now fixed - Menu file has been enhanced a little bit - New 'mode dirty' and 'mode nodirty' options to allow debugging programs that use 'trap' instructions. When 'mode dirty' is on PowerVisor will correctly execute the trap handler the program installed, but this option is not on by default because it is not very system friendly (it patches some exception vectors which are considered private) and it makes debugging a little bit slower (especially conditional tracing and such). When 'mode nodirty' is on your Amiga will crash when you try to debug programs that use 'trap' instructions. You are warned! - The 'quit' command did not work on 68000 Amiga's (Why does one need this command anyway :-) - 'trace c' (conditional tracing) is a little bit faster - 'trace r' (register tracing) is a little bit faster - New 'trace q' (quick conditional tracing) for faster conditional tracing. The advantage of this new command is that it is a lot faster (compared with 'trace c'). The disadvantage is that it only works with very primitive expressions (it uses a simple expression compiler) - 'mmurtest' and 'mmuwtest' are removed since they didn't seem to give any useful information and I was hunting for routines to optimize (removing a complete routine is one of the best possible optimization methods :-) - Solved little bug in floatingpoint debugging in combination with AmigaDOS 3.0 - PowerVisor uses NewLook menus if you have AmigaDOS 3.0 - New 'trace gf', 'trace qf', 'trace cf' and 'trace rf' commands. These commands are equivalent to 'trace g', 'trace q', 'trace c' and 'trace r' respectivelly. The difference is that the conditional test to stop tracing is only done when a change of programflow occurs. This is a lot faster but somewhat less accurate. These four new commands only work if you have a 68020 or higher in your Amiga - I finally located and solved the bug that haunted the AmigaDOS 1.3 version of PowerVisor. I THINK that debugging works perfectly now in AmigaDOS 1.3 with a 68000 (or any other) processor - Stacksize for programs to debug is set to 20000 instead of 10000 (in future it will be possible to change this number without having to reassemble PowerVisor :-) - From now on it is also allowed to type 'a = 3' instead of 'a=3'. In other words, you may put spaces round the '=' in an assignment. Note that it is still not possible to use spaces in expressions. Thus 'a=a + 1' is still not valid - PowerVisor no longer crashes when it can't find a source file for the sourcelevel debugger - s:pv/PrintMode.pv is updated for the new 'mode' arguments - Little bug fixed in 'info', 'list exec', 'interprete', ... when the PowerVisor window only has 80 columns. In that case, each output line would not fit on one line. This is now fixed - 'duse' correctly refreshes the source logical window - Refreshing of the 'debug' and 'source' logical windows is better. The windows are correctly refreshed in combination with the 'duse', 'dwin' and 'swin' commands. This was not the case in earlier versions of PowerVisor - The 'with', 'tg', 'on', 'appendto' and 'to' commands remember the result from the command that is executed. Using this feature you can, for example, transfer register values from one debug task to another - 'with' works better in combination with the fullscreen debugger. The fullscreen debug display is not refreshed with the 'with' command - New floating point routines (Adriaan vd Brand). The 'fregs' and 'float' commands are now fully functional - Bug solved in 'mode' command. Some arguments prevented the proper execution of the other arguments. This could even cause crashes in some weird cases (this probably solved the bug that caused some strange crashes about once in a month) - 'mode' command is a lot better. Less flashing, less buggy and the 'mode' settings are restored when there is an error. It is also possible to type 'mode no lace' instead of 'mode nolace' (the old format is still supported). In other words, the 'no' keyword is considered seperate. This keyword also works for flags which are not toggles, but the meaning of this is not always very useful (for example, you can do 'mode no pal'. The result will be that PowerVisor switches to the default monitor) - 'mode patch' now works from the beginning. This should solve some debugging problems on some Amiga's - 'mode viking' is renamed to 'mode a2024' - New 'default', 'euro36', 'euro72', 'sup72' and 'super' arguments for 'mode' command (support for extra ECS screen modes) - All signals are freed on exit - New 'dprevi' and 'dnexti' commands to scroll in the fullscreen debugger instruction by instruction. The 'dnexti' command works perfectly in all cases but the 'dprevi' command can fail and go back to the wrong instruction. If that is the case, simply run 'dprevi' again, and chances are that everything will be ok again - The new 'dprevi' and 'dnexti' commands are attached to the - and - keys. You can still use - and - to scroll in multiples of 2 bytes - 'StackPtr' is replaced by 'StackU' in task listing (stack usage is more useful than the stackpointer which you can see with the 'info' command anyway) - The 'getstack' function will compute the REAL maximum used stack size instead of an estimate - The output for commands like 'list', 'vars', 'alias', ... is a LOT faster. This is significant if you want to use the 'refresh' command - 'info' did not seem to work for function monitor nodes (made with 'addfunc') with type 'fullled'. The display for the first task was correct, but not for all following tasks - 'pathname' and 'unlock' were to critical in their test to see if the argument is really a lock - Interrupting the 'lock' listing will (at last!) give a 'Break...' message. This bug was harmless but I fixed it anyway :-) - Bug solved in 'to' command. If the 'to' command failed because you didn't specify the second argument (the 'command' to execute) the file would not be closed - Similar bug fixed in 'tg' command. If you didn't specify the 'command' argument, the current tag list would not be restored to the original value. This is of course less harmful than the previous bug - New fields in task structure ('_task' in 'stru' list and 'info' command) : 'TC_FLAGS', 'TC_LAUNCH' and 'TC_SWITCH' - Some fields have changed their name (because they wouldn't fit in the available space). Especially in the ExecBase and GraphicsBase structures ('exec' and 'graf' lists) - Bug fixed in the execution of macros (with 'attach' command) and the output for ARexx macros (with 'rx'), Refresh (with 'refresh') and PortPrint (with an external program using the 'PowerVisor' library). Sometimes the output of the macro would not appear on the current logical window, but on the special current logical window for the previously mentioned type of output ('Rexx', 'Refresh' or 'PPrint' logical windows) - New 'p' and 'pf' options for the 'trace' command ('pf' is only for 68020 or higher) for 'profile tracing'. With this feature you can get the exact amount of times each symbol in your program is called (with the 'pf' option) or simply passed (with the 'p' option). This command makes use of the profiler system that was already present with the 'prof' command. It may seem unbelievable, but this new command is implemented with only 12 extra machinelanguage instructions (no macros!), one extra byte in a string and one extra longword in a table! - New 'getsymstr' function to get the name of the symbol on an address (not for general use) - 'quit' will ask for confirmation if the user wants to quit while there are still some debug nodes in memory - New 'symbol t' command to remove all temporary symbols from the symbol table. Temporary symbols are symbols that start with a dot '.' or end with a '$' and only contain digits - The 'refresh command' (the command that is executed once in a while by the refresh handler (see 'refresh')) starts a new page at each tick (a new logical page). This means that there will be no more wrong -MORE- messages when the 'refresh' logical window is not open - Bug fixed in 'colrow' and 'setfont'. These two commands would ignore the settings set with 'colrow' (yes, 'colrow' ignored the settings set by 'colrow' :-) for standard logical windows. For all other logical windows (opened with 'openlw') the 'colrow' command worked fine - Most commands which have a logical window as an argument check if the argument is really a logical window (a simple consistency check) - When you used 'screen 0' or 'screen ' (so that the PowerVisor 'main' window is no backdrop window) PowerVisor would not activate this window automatically - Bug solved in 'rblock' command. When this command failed (because there was no disk in the drive for example), the allocated memory would not be freed correctly. This could cause crashes - Bug solved in 'loadtags' and 'savetags'. 'loadtags' would not work if there was a tag definition for address 0 in the file. The disadvantage of the fix is that tag files are NOT compatible anymore!!! If you have important tag files you can fix them by changing the last four bytes of the file (this should be 00000000) to FFFFFFFF (-1) - I FINALLY solved the bug that's been haunting me for years (literally)! This bug involved the 'front', 'hold', 'screen' and 'mode' commands. Whenever PowerVisor temporarily closes its screen there was a potential problem. This problem was almost always noticable when you issued a 'front' command from within ARexx when PowerVisor was in hold mode. This would cause an almost certain crash. If you had unexpected crashes using 'mode', 'screen' or 'hold', these would probably be caused by this bug. But don't despair! The bug has been fixed!!! I checked my private history file and I think that this bug must have been made on 5 January 1991 (the introduction of the current window system for PowerVisor) - It is now possible to execute ARexx commands with output while PowerVisor is in hold mode without crashing the system (for one thing because of the bug fix mentioned above and also because of yet another bug fix) - Commands like 'scan' and functions like 'key' are now safe to use when PowerVisor is in hold mode (This means that '-MORE-' also works). These commands and functions are simply ignored while in hold mode. Also commands like all the logical window commands, the physical window commands, 'mode' for screen arguments (like 'fancy', 'lace', ...) and 'screen' are also safe to use from within hold mode. 'screen' is ignored but all other commands are performed invisible. When the screen is open again everything will have happened as if the screen was never closed - New flags for 'gadgets' command: 'TABCYCLE' and 'STRINGEXT' - In spite of all the previous improvements the new PowerVisor is still smaller than version 1.31! - I REALLY solved the bug in 'quit' and 'debug' for 68000 processors. From now on, debugging should work on the 'little' Amiga's :-) This is the main reason that I release this new version so soon without waiting for more new features to emerge (I still have a lot of new features to implement) - Bug solved in CLI commandline parsing. Using the '-d' option at the end of all other options would discard the previous options. This is solved - The PowerVisor parser is a little bit extended to allow calling library functions with conflicting names (with variables). You can now use quotes for library functions (and you can't use quotes for variables) so if you want to call the Input dos.library function (for example), you can use 'input'() - Bug solved for dummy debug nodes (created with 'debug d') and the source level debugging. This bug was also visible with the 'duse' command even if you didn't use the source level debugger - Little bug solved in 'assem.pv' (see 'asm' alias for assembler) - Bug solved in 'fit' command (bug was introduced in the previous version 1.40). This command simply didn't work - 'cmdline.pv' ARexx script (a primitive way to support debugging on a normal shell (maybe even remote debugging)) is a little better - Fixed bug for 68040 processors (Amiga 4000). You needed the '-m0' option for PowerVisor to run on an 68040 processor. This is not needed anymore - Address errors are fully recoverable on the 68000 processor. Thanks to John Harper for making the necessary adjustments to my source - PowerVisor uses 'MultiView' (AmigaDOS 3.0) instead of 'AmigaGuide' for the hypertext documentation. You have to change the alias defined in the PowerVisor-startup file to use 'AmigaGuide' again - New 'mhelp' alias to use 'MultiView' instead of 'AmigaGuide' ('MultiView' is new in AmigaDOS 3.0) - You can also use the 'f' (flow) option after the 'n' trace option (instead of tracing multiple instructions, this traces multiple branches) - You can also use the 'f' (flow) option after the 'j' trace option. This option is recommended for 'trace j' if you have an 68020 or higher - New 'r' option after 'trace n', 'trace g', 'trace p', 'trace r', 'trace q', 'trace c' and 'trace j'. With this option PowerVisor will singlestep the current routine and will execute all subroutines called from within this routine at full speed. Using this feature you can limit your singlestep condition to the current routine - The documentation for 'trace' is better (in 'CommandRef.guide') - New 'while' command to repeat actions - New 'checksum' function to compute the checksum for a region of memory - New 'trace z' (with optional 'f' and 'r') to trace until the checksum for a given memory range changes