Back-End Chrome Debugger Netbeans Debugger Other Front-Ends Language Front-End Language Front-End Language Front-End Language-Agnostic Program Representation op1 op2 if else then op3 op4 Source Location
Program Representation + Run-Time Debug Information LLVM Front-End (Clang, Dragonegg, …) Debugger Back-End with Debug Information + DI Parser op1 op2 if else then op3 op4 Scope & Location Value Tracking Abstraction to Source-Level
n) {…} VALUE callFact(VALUE self, VALUE num) { int n = NUM2INT(num); int result = fact(n); return INT2NUM(result); } void Init_FactExt() { VALUE FactExt = rb_define_module("FactExt"); rb_define_method(FactExt, "fact", &callFact, 1); }