140 likes | 317 Views
Slicer / ITK / VTK Development Tools. Steve Pieper, PhD. Overall Goals. Understanding the Big Picture: Code browsing with ctags Source Navigator Debugging: tkcon Using the native debuggers itkFilterWatcher. Ctags. Exuberant CTAGS Ctags.sf.net
E N D
Slicer / ITK / VTK Development Tools Steve Pieper, PhD
Overall Goals • Understanding the Big Picture: • Code browsing with ctags • Source Navigator • Debugging: • tkcon • Using the native debuggers • itkFilterWatcher
Ctags • Exuberant CTAGS • Ctags.sf.net • This version comes with cygwin and most linux distributions • Provides detailed tag files for emacs and vi • Run in top level directory with • ctags –R .
Using the tags file from vim • Put cursor on identifier of interest • Type Control-] to jump to the tag • If there is more than one tag for this identifier, type :tselect and select desired tag from list • Type Control-t to jump back to original spot • You can nest tags on a stack to trace through a control flow
Source Navigator • http://sourcenav.sourceforge.net/ • Linux source code to compile • Windows binaries
Source Navigator • Multi-directory class browser (see whole project) • Hierarchy Display • View all code • Jump to definitions and declarations • See comments and code • Grep UI
Native Tools • CMake creates makefiles and .SLN files that can be used outside of CMake for debugging • Resolve linker or option issues • Can attach to running process with gdb or visual studio • Debug the C++ code
Visual Studio Slicer Debugging • Start Slicer • Tools->Debug Processes • Attach to wish84.exe, Slicer 2.4 • Run program until it crashes • Browse to Source directory and set breakpoints
gdb Debugging • Start slicer (built in debug mode) • Use ps to find process id of ‘parent’ vtk thread • Use gdb command ‘attach <pid>’ • For debugging startup: • slicer2-linux-x86 Base/tcl/tkcon.tcl • Attach gdb • In tkcon: • source Base/tcl/Go.tcl
Tkcon • Very smart console written in Tk • Identifier completion • Files • Variables • Class instances • UI Windows • Command line editing like readline • Create VTK class instances and experiment • Write and test tcl code interactively
Interactive VTK Commands • <instance> ListMethods • Tells all instances currently known to the interpreter • <instance> Print • Calls the PrintSelf method • <instance> ListMethods • Tell what methods are available in the interpreter
itk::FilterWatcher • Uses itk Observer mechanism to register callbacks for common events • StartEvent • ProgressEvent • EndEvent • Prints total running time
World’s oldest debugging tool • Print statements in the code! • Just remember to disable them when you are done debugging… • In C++ • vtkDebugMacro(“”); • Call GlobalWarningDisplayOn method for any instance of a vtkObject subclass • In Tcl if {$Module(verbose) == 1} { puts "INIT: ${m}Init" } Use the –-verbose option in slicer to set the Module(verbose) flag
Resources • www.slicer.org • www.na-mic.org/Wiki • www.na-mic.org/Bug • www.na-mic.org/Testing • slicer-devel@bwh.harvard.edu • slicer-users@bwh.harvard.edu