CSc 620 Debugging, Profiling, Tracing, and Visualizing Programs 2005
In this seminar class we will study various ways of
learning about a program. We're both interested in how
to find bugs (logical bugs as well as performance bugs)
in a program and how to present this information to
the programmer.
Topics include
- how do debuggers work?
- how to profilers work?
- how do you visualize the static structure
of a program?
- how do you visualize the dynamic behavior
of a program?
See
this grant proposal for a good introduction to this class.
Course Contents
- Reading and presenting research papers in class.
- Investigating current tools and present in class.
- Some introductory programming assignments to
learn how to program debuggers, profilers, etc.
- Programming projects where the entire class will
collaborate to build a debugger/profiler/visualizer.
Necessary prerequisites
- A strong background in compilers.
- Knowledge of graphics and systems programming
- Very strong programming skills in one or more of C/C++/Java.
Preliminary course structure
The first half of the course:
- How do debuggers work?
- Read papers/books about debuggers and present to the class.
- Learn Java bytecode.
- Learn about the Java Debugging Interface (JDI).
- Learn about debugging in Linux (the
ptrace
system call).
- Learn how to manipulate Java bytecode using
SandMark
and BCEL .
- Write a small tool to trace/debug Java programs using JDI and/or
bytecode manipulation.
- Learn how to manipulate x86 binaries.
- Write a small tool to trace/debug C programs using
ptrace
and/or binary modifications.
- Investigate current debuggers and present them to the class.
- How do profilers work?
- Read papers/books about profilers and present to the class.
- Learn about the Java Profiling Interface.
- Learn about profiling in Linux .
- Write a small tool to profile C programs.
- Write a small tool to profile Java programs using the Java Profiling Interface.
- Investigate current profilers and present them to the class.
- How do program visualizers work?
- Read papers/books about visualizing software and present to the class.
- Write a small tool to visualize C and/or Java programs.
- Using computer game engines for visualization.
- Investigate current code visualizers and present them to the class.
The second half of the course:
- Pick a group to work with!
- Pick a project!
- Implement the project!
- Do a presentation to the class!
- Read more papers to get a more in-depth
view of particular topics that interest you.
A list of papers that we might be reading can be found
here.
Notes
Readings - Debuggers
-
A Survey of Support For Implementing Debuggers
Vern Paxson
- Playing with ptrace, Part I
- Playing with ptrace, Part II
-
Practical Data Breakpoints: Design and Implementation
-
Efficient Algorithms for Bidirectional Debugging
Bob Boothe
-
Fast breakpoints: design and implementation,
Peter B. Kessler
-
Debugging Operating Systems with Time-Traveling Virtual Machines,
Samuel T. King, George W. Dunlap, and Peter M. Chen
-
Reverse Execution of Java Bytecode,
JONATHAN J. COOK
-
RELATIVE DEBUGGING USING MULTIPLE PROGRAM VERSIONS,
David Abramson and Rok Sosic
Readings - Profilers
-
STOOP, The Sable Toolkit for Object-Oriented Profiling ,
Rhodes Brown, Karel Driesen, John Jorgensen, Laurie J. Hendren, Qin
Wang, Clark Verbrugge.
-
gprof: a Call Graph Execution Profiler,
Susan L. Graham, Peter B. Kessler, Marshall K. McKusick
-
Continuous Profiling: Where Have All the Cycles Gone?
Jennifer M. Anderson, Lance M. BERC, JEFFREY DEAN, SANJAY GHEMAWAT,
MONIKA R. HENZINGER, SHUN-TAK A. LEUNG, RICHARD L. SITES,
MARK T. VANDEVOORDE, CARL A. WALDSPURGER, WILLIAM E. WEIHL
-
Java Virtual Machine Profiler Interface ,
D. Viswanathan and S. Liang
-
JaViz: A client/server Java profiling tool,
I. H. Kazi, D. P. Jose, B. Ben-Hamida, C. J. Hescott, C. Kwok,
J. A. Konstan, D. J. Lilja, and P.-C Yew
-
Comprehensive Profiling Support in the Java Virtual Machine
-
Vertical Profiling: Understanding the Behavior of
Object-Oriented Applications ,
Matthias Hauswirth, Peter F. Sweeney, Amer Diwan, Michael Hind
-
Using Hardware Performance Monitors to Understand the Behavior of
Java Applications,
Peter F. Sweeney, Matthias Hauswirth, Brendon Cahoon, Perry Cheng,
Amer Diwan, David Grove, Michael Hind
- PCT
- Simple and General Statistical Profiling with PCT
-
Using the SimOS Machine Simulator to Study Complex Computer Systems,
Mendel Rosenblum, Edouard Bugnion, Scott Devine, and Steve Herrod
- SimOS
- Profiling and Tracing in Linux,
Shende
Readings - Program Visualization
-
Combining Static and Dynamic Data in Code Visualization,
David Eng
Back to CSc 620 Home Page