Advanced debugging and program visualization for novice C programmers

Matthew Heinsen Egan

    Research output: ThesisDoctoral Thesis

    185 Downloads (Pure)

    Abstract

    Debugging can be exceptionally challenging for novice programmers, often consuming inordinate amounts of time and preventing students’ progress on coursework. Program visualization and debugging tools designed specifically for novice programmers have been shown to effectively assist students with both debugging and constructing knowledge of programming language semantics. Few such tools support the C programming language, despite it being widely considered a difficult language for novices. Of the tools supporting C described in the literature, most were either never released, are no longer available, or have been unmaintained for so long that they are now unusable.

    This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable.

    SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects.

    Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.
    Original languageEnglish
    QualificationDoctor of Philosophy
    Awarding Institution
    • The University of Western Australia
    Award date14 Apr 2016
    Publication statusUnpublished - 2015

    Fingerprint

    Visualization
    Students
    Computer programming languages
    Error detection
    Detectors
    Computer science
    Education
    Semantics

    Cite this

    @phdthesis{e4d266a9d007498f86774f524558e1a5,
    title = "Advanced debugging and program visualization for novice C programmers",
    abstract = "Debugging can be exceptionally challenging for novice programmers, often consuming inordinate amounts of time and preventing students’ progress on coursework. Program visualization and debugging tools designed specifically for novice programmers have been shown to effectively assist students with both debugging and constructing knowledge of programming language semantics. Few such tools support the C programming language, despite it being widely considered a difficult language for novices. Of the tools supporting C described in the literature, most were either never released, are no longer available, or have been unmaintained for so long that they are now unusable. This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable. SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects. Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.",
    keywords = "C programming language, Debugging, Program visualization, Novice programmers, LLVM, Execution tracing, Explanatory program visualization",
    author = "{Heinsen Egan}, Matthew",
    year = "2015",
    language = "English",
    school = "The University of Western Australia",

    }

    Heinsen Egan, M 2015, 'Advanced debugging and program visualization for novice C programmers', Doctor of Philosophy, The University of Western Australia.

    Advanced debugging and program visualization for novice C programmers. / Heinsen Egan, Matthew.

    2015.

    Research output: ThesisDoctoral Thesis

    TY - THES

    T1 - Advanced debugging and program visualization for novice C programmers

    AU - Heinsen Egan, Matthew

    PY - 2015

    Y1 - 2015

    N2 - Debugging can be exceptionally challenging for novice programmers, often consuming inordinate amounts of time and preventing students’ progress on coursework. Program visualization and debugging tools designed specifically for novice programmers have been shown to effectively assist students with both debugging and constructing knowledge of programming language semantics. Few such tools support the C programming language, despite it being widely considered a difficult language for novices. Of the tools supporting C described in the literature, most were either never released, are no longer available, or have been unmaintained for so long that they are now unusable. This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable. SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects. Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.

    AB - Debugging can be exceptionally challenging for novice programmers, often consuming inordinate amounts of time and preventing students’ progress on coursework. Program visualization and debugging tools designed specifically for novice programmers have been shown to effectively assist students with both debugging and constructing knowledge of programming language semantics. Few such tools support the C programming language, despite it being widely considered a difficult language for novices. Of the tools supporting C described in the literature, most were either never released, are no longer available, or have been unmaintained for so long that they are now unusable. This thesis describes the design, implementation, and evaluation of a program visualization and debugging tool for novice C programmers, named SeeC (pronounced “seek”). We avoid problems which commonly afflicted previous tools for the C programming language, particularly incomplete or incorrect language support and unsustainable implementations related to the use of custom-built parsers, interpreters, and compilers. We instead build upon the state-of-the-art compiler technologies provided by the LLVM and Clang projects, ensuring that SeeC’s language support rigorously follows the standards, that SeeC can support a range of platforms and architectures, and that SeeC’s implementation is sustainable. SeeC’s design draws upon the literature on both programming language tools and Computer Science education. It combines advanced debugging techniques, such as trace-based debugging and runtime error detection, with program visualization features which have been shown to effectively assist novice programmers with program comprehension and debugging tasks. As far as we are aware, SeeC contains the first implementation of a dynamic evaluation tree visualization, and the first execution tracing system targeting LLVM’s Intermediate Representation. SeeC can be used as a traditional error detector, a generic program visualization system, a trace-based debugger, a tutorial environment, or as a tool to facilitate collaboration on multi-student projects. Where possible, we evaluate SeeC’s features independently. For example, the execution tracing and runtime error detection system is evaluated by tracing the execution of real students’ project solutions collected over two years. SeeC’s runtime error detection compared favourably against several contemporary error detectors, finding legitimate runtime errors in more project solutions than any other tool. We also evaluate SeeC as a complete system. Firstly, we evaluate SeeC’s use in authentic learning scenarios by recording students’ interactions with the system during their regular coursework. Secondly, we use an observational study to investigate students’ use of SeeC when performing predetermined debugging tasks. Finally we investigate students’ perceptions of SeeC through a survey administered to participants of the aforementioned observational study. These evaluations show that students can use SeeC to debug programs effectively, and that students consider SeeC easy to use and effective for performing debugging tasks.

    KW - C programming language

    KW - Debugging

    KW - Program visualization

    KW - Novice programmers

    KW - LLVM

    KW - Execution tracing

    KW - Explanatory program visualization

    M3 - Doctoral Thesis

    ER -