GDB (API)
/home/stan/gdb/src/gdb/gdbtk/library/actiondlg.tcl
Go to the documentation of this file.
00001 # Tracepoint actions dialog for Insight.
00002 # Copyright (C) 1997, 1998, 1999, 2001 Red Hat, Inc.
00003 #
00004 # This program is free software; you can redistribute it and/or modify it
00005 # under the terms of the GNU General Public License (GPL) as published by
00006 # the Free Software Foundation; either version 2 of the License, or (at
00007 # your option) any later version.
00008 #
00009 # This program is distributed in the hope that it will be useful,
00010 # but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 # GNU General Public License for more details.
00013 
00014 
00015 itcl::class ActionDlg {
00016   inherit ManagedWin
00017 
00018   # ------------------------------------------------------------------
00019   # CONSTRUCTOR
00020   # ------------------------------------------------------------------
00021   constructor {args} {
00022     global _TStepCount _TOtherVariable
00023 
00024     eval itk_initialize $args
00025 
00026     set Registers [gdb_reginfo name]
00027     if {$Line != ""} {
00028       set Locals  [gdb_get_locals "$File:$Line"]
00029       set Args    [gdb_get_args "$File:$Line"]
00030     } else {
00031       set Locals  [gdb_get_locals "*$Address"]
00032       set Args    [gdb_get_args "*$Address"]
00033     }
00034     set Variables [concat $Locals $Args]
00035     foreach a $Registers {
00036       lappend Variables "\$$a"
00037     }
00038     
00039     if {[llength $Args] > 0} {
00040       lappend Variables "All Arguments"
00041     }
00042     if {[llength $Locals] > 0} {
00043       lappend Variables  "All Locals" 
00044     } 
00045     lappend Variables "All Registers"
00046     lappend Variables "Collect Stack"
00047 
00048     build_win
00049 
00050     # Set a default return status, in case we are destroyed
00051     set _TOtherVariable {}
00052 
00053     # Fill the listboxes with any default data
00054     if {"$Data" != {}} {
00055       change 1 $Data
00056     }
00057   }
00058 
00059   # ------------------------------------------------------------------
00060   #  DESTRUCTOR - destroy window containing widget
00061   # ------------------------------------------------------------------
00062   destructor {
00063 
00064     # Remove this window and all hooks
00065     # grab release $this
00066 
00067     # Note that this is okay: the callback (TraceDlg::done, usually) will
00068     # ignore stray "cancel" callbacks
00069     eval $Callback cancel
00070   }
00071 
00072   # ------------------------------------------------------------------
00073   # METHOD: build_win - build the Trace dialog box (cache this?)
00074   # ------------------------------------------------------------------
00075   method build_win {} {
00076     global _TStepCount _TOtherVariable
00077 
00078     set f $itk_interior
00079 
00080     # The two frames of this dialog
00081     set bbox [frame $f.bbox];            # for holding OK,CANCEL buttons
00082     set data [frame $f.data];            # for everything else
00083 
00084     # Setup the button box
00085     button $bbox.ok     -text OK -command "$this ok"
00086     button $bbox.cancel -text CANCEL -command "$this cancel"
00087     pack $bbox.ok $bbox.cancel -side left -padx 10 -expand yes
00088 
00089     # The "Data Collection" Frame
00090     set top [frame $data.top]
00091     set bot [frame $data.bot]
00092 
00093     set boxes  [frame $top.boxes]
00094     set cFrame [frame $boxes.cFrame]
00095     set vFrame [frame $boxes.vFrame]
00096     set bFrame [frame $boxes.bframe]
00097     set oFrame [frame $top.uFrame]
00098     pack $cFrame $bFrame $vFrame -side left -expand yes -padx 5
00099 
00100     # While stepping
00101     if {$WhileStepping} {
00102       set step_frame [frame $top.stepf]
00103       label $step_frame.whilelbl -text {While Stepping,   Steps:}
00104       set WhileSteppingEntry [entry $step_frame.steps          \
00105                           -textvariable _TStepCount      \
00106                           -width 5]
00107       pack $step_frame.whilelbl $WhileSteppingEntry -side left  
00108     }
00109 
00110     # The Collect listbox
00111     label $cFrame.lbl -text {Collect:}
00112     set CollectLB [iwidgets::scrolledlistbox $cFrame.lb -hscrollmode dynamic \
00113                -vscrollmode dynamic                                    \
00114                -selectioncommand [code $this toggle_button_state 0]    \
00115                -dblclickcommand [code $this change 0]                  \
00116                -selectmode extended                                    \
00117                -exportselection false]
00118     [$CollectLB component listbox] configure -background gray92
00119     pack $cFrame.lbl $cFrame.lb -side top -expand yes -pady 2
00120 
00121     # The Variables listbox
00122     label $vFrame.lbl -text {Variables:}
00123     set VariablesLB [iwidgets::scrolledlistbox $vFrame.lb -hscrollmode dynamic \
00124                  -vscrollmode dynamic                                    \
00125                  -selectioncommand [code $this toggle_button_state 1]    \
00126                  -dblclickcommand [code $this change 1]                  \
00127                  -selectmode extended                                    \
00128                  -exportselection false]
00129     [$VariablesLB component listbox] configure -background gray92
00130     pack $vFrame.lbl $vFrame.lb -side top -expand yes -pady 2
00131 
00132     # The button frame
00133     set AddButton [button $bFrame.add -text {<<< Collect}   \
00134                -command "$this change 1" -state disabled]
00135     set RemoveButton [button $bFrame.del -text {Ignore >>>} \
00136                   -command "$this change 0" -state disabled]
00137     pack $bFrame.add $bFrame.del -side top -expand yes -pady 5
00138 
00139     # The other frame (type-in)
00140     label $oFrame.lbl -text {Other:}
00141     set OtherEntry [entry $oFrame.ent -textvariable _TOtherVariable]
00142     pack $oFrame.lbl $OtherEntry -side left
00143     bind $OtherEntry <Return> "$this change_other"
00144 
00145     # Pack these frames
00146     if {$WhileStepping} {
00147       pack $step_frame -side top
00148     }
00149 
00150     pack $boxes $oFrame -side top -padx 5 -pady 5
00151     pack $top $bot -side top
00152 
00153     # Fill the list boxes
00154     fill_listboxes
00155 
00156     # Pack the main frames
00157     # after idle
00158     pack $f.data $bbox -side top -padx 4 -pady 2 \
00159       -expand yes -fill x
00160     
00161     # !!???
00162     if {$WhileStepping} {
00163       $WhileSteppingEntry delete 0 end
00164       $WhileSteppingEntry insert 0 $Steps
00165     }
00166   }
00167 
00168   method toggle_button_state {add} {
00169 
00170     # This is invoked whenever a <1> event is generated in
00171     # the listbox...
00172     if {$add} {
00173       set a [$VariablesLB getcurselection]
00174       if {"$a" != ""} {
00175   $AddButton configure -state normal
00176   $RemoveButton configure -state disabled
00177       }
00178     } else {
00179       set a [$CollectLB getcurselection]
00180       if {"$a" != ""} {
00181   $AddButton configure -state disabled
00182   $RemoveButton configure -state normal
00183       }
00184     }
00185   }
00186 
00187 
00188   # ------------------------------------------------------------------
00189   # METHOD: fill_listboxes - fills the two listboxes
00190   # ------------------------------------------------------------------
00191   method fill_listboxes {{last {}}} {
00192 
00193     # Fill the Collect listbox with the variables being collected
00194     if {[info exists Collect]} {
00195       fill_collect $last
00196     }
00197 
00198     fill_variables $last
00199   }      
00200 
00201   # ------------------------------------------------------------------
00202   # METHOD: change - change a selected variable
00203   # ------------------------------------------------------------------
00204   method change {add {select {}}} {
00205     if {"$select" == {}} {
00206       set selections [get_selections $add]
00207       set lb        [lindex $selections 0]
00208       set last      [lindex $selections 1]
00209       set selection [lindex $selections 2]
00210       set noname 1
00211     } else {
00212       # This usually (only) occurs when we open this dialog for editing
00213       # some existing action.
00214       set lb   {}
00215       set last {}
00216       set noname 0
00217       set selection $select
00218     }
00219     
00220     $RemoveButton configure -state disabled
00221     $AddButton configure -state disabled
00222 
00223     # Remove all the selections from one list
00224     # and add them to the other list
00225     if {$add} {
00226       set list1 $Variables
00227       set list2 $Collect
00228     } else {
00229       set list1 $Collect
00230       set list2 $Variables
00231     }
00232 
00233     foreach a $selection {
00234       if {$noname} {
00235   set name [$lb get $a]
00236       } else {
00237   set name $a
00238       }
00239 
00240       if {"$name" == "All Locals" || "$name" == {$loc}} {
00241   set name "All Locals"
00242   set lists [all_locals $add]
00243   set list1 [lindex $lists 0]
00244   set list2 [lindex $lists 1]
00245       } elseif {"$name" == "All Registers" || "$name" == {$reg}} {
00246   set name "All Registers"
00247   set lists [all_regs $add]
00248   set list1 [lindex $lists 0]
00249   set list2 [lindex $lists 1]
00250       } elseif {"$name" == "All Arguments" || "$name" == {$arg}} {
00251   set name "All Arguments"
00252   set lists [all_args $add]
00253   set list1 [lindex $lists 0]
00254   set list2 [lindex $lists 1]
00255       } else {
00256   set i [lsearch -exact $list1 $name]
00257   set list1 [lreplace $list1 $i $i]
00258 
00259   # Check if this is something we want to keep on a list
00260   if {[lsearch $Args $name] != -1 || [lsearch $Registers [string trim $name \$]] != -1 || [lsearch $Locals $name] != -1 || $add} {
00261     lappend list2 $name
00262   }
00263       }
00264 
00265       if {$add} {
00266   set Collect $list2
00267   set Variables $list1
00268       } else {
00269   set Collect $list1
00270   set Variables $list2
00271       }
00272     }
00273 
00274     # Update boxes (!! SLOW !!)
00275     fill_collect $last
00276     fill_variables $last
00277   }
00278 
00279   # ------------------------------------------------------------------
00280   # METHOD: fill_collect - fill the collect box
00281   # ------------------------------------------------------------------
00282   method fill_collect {{last {}}} {
00283 
00284     $CollectLB delete 0 end
00285     set Collect [sort $Collect]
00286     foreach a $Collect {
00287       $CollectLB insert end $a
00288     }
00289     if {"$last" != ""} {
00290       $CollectLB see $last
00291     }
00292   }
00293 
00294   # ------------------------------------------------------------------
00295   # METHOD: fill_variables - fill the variables box
00296   # ------------------------------------------------------------------
00297   method fill_variables {{last {}}} {
00298 
00299     $VariablesLB delete 0 end
00300     set Variables [sort $Variables]
00301     foreach a $Variables {
00302       $VariablesLB insert end $a
00303     }
00304 
00305     if {"$last" != ""} {
00306       $VariablesLB see $last
00307     }
00308   }
00309 
00310   # ------------------------------------------------------------------
00311   # METHOD: sort - sort a list of variables, placing regs and
00312   #                special identifiers (like "All Locals") at end
00313   # ------------------------------------------------------------------
00314   method sort {list} {
00315     
00316     set special_names {
00317       "All Arguments" args \
00318   "All Locals" locs \
00319   "All Registers" regs \
00320   "Collect Stack" stack
00321     }
00322 
00323     foreach {name var} $special_names {
00324       set i [lsearch $list $name]
00325       if {$i != -1} {
00326   set $var 1
00327   set list [lreplace $list $i $i]
00328       } else {
00329   set $var 0
00330       }
00331     }
00332 
00333     # Extract all the locals, regs, args, globals
00334     set types_list {Args Locals Registers } 
00335     foreach type $types_list {
00336       set used_$type {}
00337 
00338       foreach a [set $type] {
00339   set i [lsearch $list $a]
00340   if {$i != -1} {
00341     lappend used_$type $a
00342     set list [lreplace $list $i $i]
00343   }
00344       }
00345       set used_$type [lsort [set used_$type]]
00346     }
00347 
00348     set globals [lsort $list]
00349 
00350     # Sort the remaining list in order: args, locals, globals, regs
00351     set list [concat $used_Args $used_Locals $globals $used_Registers]
00352 
00353     set list2 {}
00354 
00355     foreach {name var} $special_names {
00356       if {[set $var]} {
00357   lappend list2 $name
00358       }
00359     }
00360 
00361     set list [concat $list2 $list]
00362     return $list
00363   }
00364   
00365   # ------------------------------------------------------------------
00366   # METHOD: all_args - add/remove all args
00367   # ------------------------------------------------------------------
00368   method all_args {add} {
00369 
00370     if {$add} {
00371       set list1 $Variables
00372       set list2 $Collect
00373     } else {
00374       set list1 $Collect
00375       set list2 $Variables
00376     }
00377 
00378 #    foreach var $Args {
00379 #      set i [lsearch $list1 $var]
00380 #      if {$i != -1} {
00381 # set list1 [lreplace $list1 $i $i]
00382 # lappend list2 $var
00383 #      }
00384 #    }
00385 
00386     lappend list2 "All Arguments"
00387     set i [lsearch $list1 "All Arguments"]
00388     if {$i != -1} {
00389       set list1 [lreplace $list1 $i $i]
00390     }
00391 
00392     return [list $list1 $list2]
00393   }
00394 
00395   # ------------------------------------------------------------------
00396   # METHOD: all_locals - add/remove all locals
00397   # ------------------------------------------------------------------
00398   method all_locals {add} {
00399 
00400     if {$add} {
00401       set list1 $Variables
00402       set list2 $Collect
00403     } else {
00404       set list1 $Collect
00405       set list2 $Variables
00406     }
00407 
00408 #    foreach var $Locals {
00409 #      set i [lsearch $list1 $var]
00410 #      if {$i != -1} {
00411 # set list1 [lreplace $list1 $i $i]
00412 # lappend list2 $var
00413 #      }
00414 #    }
00415 
00416     lappend list2 "All Locals"
00417     set i [lsearch $list1 "All Locals"]
00418     if {$i != -1} {
00419       set list1 [lreplace $list1 $i $i]
00420     }
00421 
00422     return [list $list1 $list2]
00423   }
00424 
00425   # ------------------------------------------------------------------
00426   # METHOD: all_regs - add/remove all registers
00427   # ------------------------------------------------------------------
00428   method all_regs {add} {
00429 
00430     if {$add} {
00431       set list1 $Variables
00432       set list2 $Collect
00433     } else {
00434       set list1 $Collect
00435       set list2 $Variables
00436     }
00437 
00438 #    foreach var $Registers {
00439 #      set i [lsearch $list1 "\$$var"]
00440 #      if {$i != -1} {
00441 # set list1 [lreplace $list1 $i $i]
00442 # lappend list2 "\$$var"
00443 #      }
00444 #    }
00445 
00446     lappend list2 "All Registers"
00447     set i [lsearch $list1 "All Registers"]
00448     if {$i != -1} {
00449       set list1 [lreplace $list1 $i $i]
00450     }
00451 
00452     return [list $list1 $list2]
00453   }
00454 
00455   # ------------------------------------------------------------------
00456   # METHOD: change_other - add/remove a user defined type
00457   # ------------------------------------------------------------------
00458   method change_other {} {
00459     set other [$OtherEntry get]
00460     
00461     if {"$other" != ""} {
00462       set added 0
00463 
00464       # Check if this is a local/register/arg
00465       set i [lsearch $Locals "$other"]
00466       if {$i != -1} {
00467   set i [lsearch $Collect "$other"]
00468   set added 1
00469   if {$i != -1} {
00470     # It's a local on the collection list
00471     debug "local on collection list"
00472     set add 0
00473     set list1 [lreplace $Collect $i $i]
00474     set list2 [concat $Variables "$other"]
00475   } else {
00476     # It's a local on the variables list
00477     debug "local on variable list"
00478     set add 1
00479     set i [lsearch $Variables "$other"]
00480     set list1 [lreplace $Variables $i $i]
00481     set list2 [concat $Collect "$other"]
00482   }
00483       }
00484 
00485       set i [lsearch $Registers [string trim "$other" \$]]
00486       if {$i != -1} {
00487   set i [lsearch $Collect "$other"]
00488   set added 1
00489   if {$i != -1} {
00490     # It's a register on the collection list
00491     debug "register on collection list"
00492     set add 0
00493     set list1 [lreplace $Collect $i $i]
00494     set list2 [concat $Variables "$other"]
00495   } else {
00496     # It's a register on the variables list
00497     debug "register on variable list"
00498     set add 1
00499     set i [lsearch $Variables "$other"]
00500     set list1 [lreplace $Variables $i $i]
00501     set list2 [concat $Collect "$other"]
00502   }
00503       }
00504 
00505       set i [lsearch $Args $other]
00506       if {$i != -1} {
00507   set i [lsearch $Collect "$other"]
00508   set added 1
00509   if {$i != -1} {
00510     # It's an arg on the collection list
00511     debug "arg on collection list"
00512     set add 0
00513     set list1 [lreplace $Collect $i $i]
00514     set list2 [concat $Variables "$other"]
00515   } else {
00516     # It's an arg on the variables list
00517     debug "arg on variable list"
00518     set add 1
00519     set i [lsearch $Variables "$other"]
00520     set list1 [lreplace $Variables $i $i]
00521     set list2 [concat $Collect "$other"]
00522   }
00523       }
00524       
00525       # Check for special tags
00526       if {!$added} {
00527   if {"[string tolower $other]" == "all locals"} {
00528     set i [lsearch $Variables "All Locals"]
00529     if {$i != -1} {
00530       # It's "All Locals" on the variables list
00531       set add 1
00532       set lists [all_locals 1]
00533       set list1 [lindex $lists 0]
00534       set list2   [lindex $lists 1]
00535     } else {
00536       # It's "All Locals" on the Collect list
00537       set add 0
00538       set lists [all_locals 0]
00539       set list1 [lindex $lists 0]
00540       set list2 [lindex $lists 1]
00541     }
00542   } elseif {"[string tolower $other]" == "all registers"} {
00543     set i [lsearch $Variables "All Registers"]
00544     if {$i != -1} {
00545       # It's "All Registers" on the Variables list
00546       set add 1
00547       set lists [all_regs 1]
00548       set list1 [lindex $lists 0]
00549       set list2 [lindex $lists 1]
00550     } else {
00551       set add 0
00552       set lists [all_regs 0]
00553       set list1 [lindex $lists 0]
00554       set list2 [lindex $lists 1]
00555     }
00556   } elseif {"[string tolower $other]" == "all arguments"} {
00557     set i [lsearch $Variables "All Arguments"]
00558     if {$i != -1} {
00559       # It's "All Arguments" on the Variables list
00560       set add 1
00561       set lists [all_args 1]
00562       set list1 [lindex $lists 0]
00563       set list2 [lindex $lists 1]
00564     } else {
00565       set add 0
00566       set lists [all_args 0]
00567       set list1 [lindex $lists 0]
00568       set list2 [lindex $lists 1]
00569     }
00570   } elseif {"[string tolower $other]" == "collect stack"} {
00571     set i [lsearch $Variables "Collect Stack"]
00572     if {$i != -1} {
00573       # It's "All Arguments" on the Variables list
00574       set add 1
00575       set lists [all_args 1]
00576       set list1 [lindex $lists 0]
00577       set list2 [lindex $lists 1]
00578     } else {
00579       set add 0
00580       set lists [all_args 0]
00581       set list1 [lindex $lists 0]
00582       set list2 [lindex $lists 1]
00583     }
00584   } else {
00585     # Check if this entry is on the Collect list
00586     set i [lsearch $Collect $other]
00587     if {$i != -1} {
00588       # It's on the list -- remove it
00589       set add 0
00590       set list1 [lreplace $Collect $i $i]
00591       set list2 $Variables
00592     } else {
00593       # It's not on the list -- add it
00594 
00595       set other [string trim $other \ \r\t\n]
00596 
00597             # accept everything, send to gdb to validate
00598       set ok 1
00599 
00600             # memranges will be rejected right here
00601 
00602       if {[string range $other 0 1] == "\$("} {
00603               tk_messageBox -type ok -icon error \
00604                   -message "Expression syntax not supported"
00605               set ok 0
00606       }
00607         
00608             # do all syntax checking later
00609        if {$ok} {
00610         #debug "Keeping \"$other\""
00611         # We MUST string out all spaces...
00612         if {[regsub -all { } $other {} expression]} {
00613           set other $expression
00614         }
00615         set add 1
00616         set list1 $Variables
00617         set list2 [concat $Collect "$other"]
00618       } else {
00619         #debug "Discarding \"$other\""
00620       }
00621     }
00622   }
00623       }
00624 
00625       # Clear the entry
00626       $OtherEntry delete 0 end
00627 
00628       if {$add} {
00629   set Variables $list1
00630   set Collect $list2
00631       } else {
00632   set Variables $list2
00633   set Collect $list1
00634       }
00635       fill_listboxes
00636     }
00637   }
00638 
00639 
00640   # ------------------------------------------------------------------
00641   # METHOD: get_selections - get all the selected variables
00642   #         pass 0 to get the selections from the collect box
00643   #         Returns a list of: listbox in which the selections were
00644   #         obtained, last element selected on the list, and all the
00645   #         selected elements
00646   # ------------------------------------------------------------------
00647   method get_selections {vars} {
00648     
00649     if {$vars} {
00650       set widget $VariablesLB
00651     } else {
00652       set widget $CollectLB
00653     }
00654 
00655     set elements [$widget curselection]
00656     set list {}
00657     set i 0
00658     foreach i $elements {
00659       lappend list [$widget get $i]
00660     }
00661 
00662     return [list $widget $i $elements]
00663   }
00664 
00665   # ------------------------------------------------------------------
00666   # METHOD: cancel - cancel the dialog and do not set the trace
00667   # ------------------------------------------------------------------
00668   method cancel {} {
00669     ::delete object $this
00670   }
00671 
00672   method remove_special {list items} {
00673     
00674     foreach item $items {
00675       set i [lsearch $list $item]
00676       if {$i != -1} {
00677   set list [lreplace $list $i $i]
00678       } else {
00679   set i [lsearch $list \$$item]
00680   if {$i != -1} {
00681     set list [lreplace $list $i $i]
00682   }
00683       }
00684     }
00685 
00686     return $list
00687   }
00688 
00689   # ------------------------------------------------------------------
00690   # METHOD: ok - validate the tracepoint and install it
00691   # ------------------------------------------------------------------
00692   method ok {} {
00693     global _TStepCount
00694 
00695     # Add anything in the OtherEntry
00696     change_other
00697 
00698     # Check that we are collecting data
00699     if {[llength $Collect] == 0} {
00700       # No data!
00701       set msg "No data specified for the given action."
00702       set answer [tk_messageBox -type ok -title "Tracepoint Error" \
00703               -icon error \
00704               -message $msg]
00705       case $answer {
00706   cancel {
00707     cancel
00708   }
00709   ok {
00710     return
00711   }
00712       }
00713     }
00714 
00715     set i [lsearch $Collect "All Locals"]
00716     if {$i != -1} {
00717       set data [lreplace $Collect $i $i]
00718       set data [concat $data {$loc}]
00719 
00720       # Remove all the locals from the list
00721       set data [remove_special $data $Locals]
00722     } else {
00723       set data $Collect
00724     }
00725 
00726     set i [lsearch $data "All Registers"]
00727     if {$i != -1} {
00728       set data [lreplace $data $i $i]
00729       set data [concat $data {$reg}]
00730 
00731       # Remove all the locals from the list
00732       set data [remove_special $data $Registers]
00733     }
00734 
00735     set i [lsearch $data "All Arguments"]
00736     if {$i != -1} {
00737       set data [lreplace $data $i $i]
00738       set data [concat $data {$arg}]
00739 
00740       # Remove all the locals from the list
00741       set data [remove_special $data $Args]
00742     }
00743 
00744    set i [lsearch $data "Collect Stack"]
00745     if {$i != -1} {
00746       set data [lreplace $data $i $i]
00747       set data [concat $data [collect_stack]]
00748 
00749     }
00750 
00751     # Remove repeats
00752     set d {}
00753     foreach i $data {
00754       if {![info exists check($i)]} {
00755   set check($i) 1
00756   lappend d $i
00757       }
00758     }
00759 
00760     if {$WhileStepping} {
00761       set steps $_TStepCount
00762     } else {
00763       set steps 0
00764     }
00765 
00766     if {"$Data" != {}} {
00767       set command "modify"
00768     } else {
00769       set command "add"
00770     }
00771 
00772     debug "DATA = $data"
00773     eval $Callback $command $steps [list $data]
00774     ::delete object $this
00775   }
00776 
00777 
00778   method collect_stack {} {
00779     return $StackCollect
00780   }
00781     
00782   method cmd {line} {
00783     $line
00784   }
00785 
00786   # PUBLIC DATA
00787   public variable File
00788   public variable Line {}
00789   public variable WhileStepping 0
00790   public variable Number
00791   public variable Callback
00792   public variable Data {}
00793   public variable Steps {}
00794   public variable Address {}
00795 
00796   # PROTECTED DATA
00797   protected variable WhileSteppingEntry
00798   protected variable CollectLB
00799   protected variable VariablesLB
00800   protected variable Variables {}
00801   protected variable Collect {}
00802   protected variable Locals
00803   protected variable Args
00804   protected variable Registers
00805   protected variable Others {}
00806   protected variable AddButton
00807   protected variable RemoveButton
00808   protected variable OtherEntry
00809   protected variable StackCollect {*(char*)$sp@64}
00810 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines