cdebugging

Trace changes to variables automatically


I am debugging a C program (GCC and GDB in Linux and Visual Studio in Windows) that gives different results on two different architectures. I'd like to compare execution on each architecture by tracing the changes to the values stored in variables in order to locate differences.

file main.c, line 234. Variable A changes from 34 to 23
file main.c, line 236. Variable B changes from 0 to 2
.....
etc.

Can the compiler be instructed to instrument to this effect, without manually littering the source with printf statements?


Solution

  • I would write a script to autopilot the debugger. I don't know if expect is available on windows (it probably is), but it's a great tool for writing scripts that autopilot interactive tools. The script would go something like:

    #!/usr/bin/expect
    set progname [lindex $argv 0]
    spawn gdb $progname
    expect "(gdb)"
    send "break main\n"
    expect "(gdb)"
    send "run\n"
    while 1 {
        expect {
        "(gdb)" {
            send "info locals\n"
            expect "(gdb)"
            send "next\n"
        }

    "Program exited normally" {
        exit;
    }
    }
    

    }

    I would change "main" to the function where you think the program goes wrong. You can also insert any other debugger commands you want, such as printing out the line you are on before printing the variables; here i use "info locals" that prints out all local values. Clearly you would need to save this output to a file for analysis. Expect is pretty easy to learn and the syntax is all based on tcl.