You can write scripts to control debugger behavior. Scripts are Java classes that use the IDebugAPI interface to control the debugger.
The IDebugAPI interfaces is as follows:
package sybase.asa.procdebug; import java.util.*; public interface IDebugAPI { // Simulate Menu Items IDebugWindow MenuOpenSourceWindow() throws DebugError; IDebugWindow MenuOpenCallsWindow() throws DebugError; IDebugWindow MenuOpenClassesWindow() throws DebugError; IDebugWindow MenuOpenClassListWindow() throws DebugError; IDebugWindow MenuOpenMethodsWindow() throws DebugError; IDebugWindow MenuOpenStaticsWindow() throws DebugError; IDebugWindow MenuOpenCatchWindow() throws DebugError; IDebugWindow MenuOpenProcWindow() throws DebugError; IDebugWindow MenuOpenOutputWindow() throws DebugError; IDebugWindow MenuOpenBreakWindow() throws DebugError; IDebugWindow MenuOpenLocalsWindow() throws DebugError; IDebugWindow MenuOpenInspectWindow() throws DebugError; IDebugWindow MenuOpenRowVarWindow() throws DebugError; IDebugWindow MenuOpenQueryWindow() throws DebugError; IDebugWindow MenuOpenEvaluateWindow() throws DebugError; IDebugWindow MenuOpenGlobalsWindow() throws DebugError; IDebugWindow MenuOpenConnectionWindow() throws DebugError; IDebugWindow MenuOpenThreadsWindow() throws DebugError; IDebugWindow GetWindow( String name ) throws DebugError; void MenuRunRestart() throws DebugError; void MenuRunHome() throws DebugError; void MenuRunGo() throws DebugError; void MenuRunToCursor() throws DebugError; void MenuRunInterrupt() throws DebugError; void MenuRunOver() throws DebugError; void MenuRunInto() throws DebugError; void MenuRunIntoSpecial() throws DebugError; void MenuRunOut() throws DebugError; void MenuStackUp() throws DebugError; void MenuStackDown() throws DebugError; void MenuStackBottom() throws DebugError; void MenuFileExit() throws DebugError; void MenuFileOpen( String name ) throws DebugError; void MenuFileAddSourcePath( String what ) throws DebugError; void MenuSettingsLoadState( String file ) throws DebugError; void MenuSettingsSaveState( String file ) throws DebugError; void MenuWindowTile() throws DebugError; void MenuWindowCascade() throws DebugError; void MenuWindowRefresh() throws DebugError; void MenuHelpWindow() throws DebugError; void MenuHelpContents() throws DebugError; void MenuHelpIndex() throws DebugError; void MenuHelpAbout() throws DebugError; void MenuBreakAtCursor() throws DebugError; void MenuBreakClearAll() throws DebugError; void MenuBreakEnableAll() throws DebugError; void MenuBreakDisableAll() throws DebugError; void MenuSearchFind( IDebugWindow w, String what ) throws DebugError; void MenuSearchNext( IDebugWindow w ) throws DebugError; void MenuSearchPrev( IDebugWindow w ) throws DebugError; void MenuConnectionLogin() throws DebugError; void MenuConnectionReleaseSelected() throws DebugError; // output window void OutputClear(); void OutputLine( String line ); void OutputLineNoUpdate( String line ); void OutputUpdate(); // Java source search path void SetSourcePath( String path ) throws DebugError; String GetSourcePath() throws DebugError; // Catch java exceptions Vector GetCatching(); void Catch( boolean on, String name ) throws DebugError; // Database connections int ConnectionCount(); void ConnectionRelease( int index ); void ConnectionAttach( int index ); String ConnectionName( int index ); void ConnectionSelect( int index ); // Login to database boolean LoggedIn(); void Login( String url, String userId, String password, String userToDebug ) throws DebugError; void Logout(); // Simulate keyboard/mouse actions void DeleteItemAt( IDebugWindow w, int row ) throws DebugError; void DoubleClickOn( IDebugWindow w, int row ) throws DebugError; // Breakpoints Object BreakSet( String where ) throws DebugError; void BreakClear( Object b ) throws DebugError; void BreakEnable( Object b, boolean enabled ) throws DebugError; void BreakSetCount( Object b, int count ) throws DebugError; int BreakGetCount( Object b ) throws DebugError; void BreakSetCondition( Object b, String condition ) throws DebugError; String BreakGetCondition( Object b ) throws DebugError; Vector GetBreaks() throws DebugError; // Scripting void RunScript( String args[] ) throws DebugError; void AddEventHandler( DebugScript s ); void RemoveEventHandler( DebugScript s ); // Miscellaneous void EvalRun( String expr ) throws DebugError; void QueryRun( String query ) throws DebugError; void QueryMoreRows() throws DebugError; Vector GetClassNames(); Vector GetProcedureNames(); Vector WindowContents( IDebugWindow window ) throws DebugError; boolean AtBreak(); boolean IsRunning(); boolean AtStackTop(); boolean AtStackBottom(); void SetStatusText( String msg ); String GetStatusText(); void WaitCursor(); void OldCursor(); void Error( Exception x ); void Error( String msg ); void Warning( String msg ); String Ask( String title ); boolean MenuIsChecked( String cmd ); void MenuSetChecked( String cmd, boolean on ); void AddInspectItem( String s ) throws DebugError; // Constants for DebugScript.OnEvent parameter public static final int EventBreak = 0; public static final int EventTerminate = 1; public static final int EventStep = 2; public static final int EventInterrupt = 3; public static final int EventException = 4; public static final int EventConnect = 5; };