A New View on Debugging for Novice Programmers

Matthew Heinsen Egan & Chris McDonald, University of Western Australia

This presentation provides an overview of the design and implementation of SeeC, our new approach assisting programming novices at university to develop, understand, and debug, their first programs. Unlike professional-strength tools, such as XCode and Eclipse, SeeC is not a full IDE. Instead, SeeC focuses on explaining programs’ static meaning and runtime behaviour to novice programmers, and promotes an inquiry-based view of debugging.

By modifying the popular Clang/LLVM compiler suite employed on OS-X, the execution of programs compiled with SeeC results in a recording of the program’s complete execution trace. This enables students’ programs to be reviewed, and their bugs to be located and explained, by replaying the trace and identifying conditions leading to bugs. All memory references made by SeeC-compiled programs may be automatically visualised, providing novices with the opportunity to view and debug programs’ execution, particularly those with errant dynamic data-structures. SeeC is fully aware of language and library standards, and can report bugs in different natural languages, with reference to these standards.

SeeC employs a number of contemporary technologies, including a modified version of the Clang/LLVM compiler suite, wxWidgets for its graphical interface and interactions, graphviz for runtime visualisation, and ICU for natural language support.

In combination, the features enable students to better collaborate by asynchronously sharing their traces and understanding, and for educators to develop seminal introductory examples and challenging exercises. This presentation focuses on our selection and use of powerful software and tools on Apple’s OS-X.


Matthew Heinsen Egan and Chris McDonaldMatthew Heinsen Egan is a PhD student in Computer Science, at The University of Western Australia, and Chris McDonald is his PhD supervisor. Both have strong interests in the application of modern software technologies to Computer Science Education, particularly to better assist novice programmers, and in the exposition of contemporary computer systems.