全新安装的代码块12.11 + mingw pack.
用-g编译,没有优化.
#include <stdio.h>
void foo(int a, int b);
int main() {
foo(400, 42);
return 0;
}
void foo(int a, int b) {
a = a - 10;
b = a + 1;
printf("y2 %d\n", b);
}
Run Code Online (Sandbox Code Playgroud)
我在"void foo(int a,int b)"上设置了一个断点,当我逐步完成3行时,我看起来是b的值.无论是使用代码块调试功能还是使用gdb命令行,b的值都是42而不是391.控制台输出正确,391.
C:\DebugTest>"C:\Program Files (x86)\CodeBlocks\MinGW\bin\gdb.exe"
GNU gdb (GDB) 7.5
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) file bin/Debug/DebugTest.exe
Reading symbols from C:\DebugTest\bin\Debug\DebugTest.exe...done.
(gdb) break foo
Breakpoint 1 at 0x401363: file C:\DebugTest\main.c, line 14.
(gdb) run
Starting program: C:\DebugTest\bin\Debug\DebugTest.exe
[New Thread 3596.0x658]
Breakpoint 1, foo (a=400, b=42) at C:\DebugTest\main.c:14
14 a = a - 10;
(gdb) print b
$1 = 42
(gdb) step
15 b = a + 1;
(gdb) print b
$2 = 42
(gdb) step
17 printf("y2 %d\n", b);
(gdb) print b
$3 = 42
(gdb)
Run Code Online (Sandbox Code Playgroud)
知道什么可能是错的吗?=)
我搜索了gcc bugzilla并发现了这个错误报告:
虽然报告是关于gcc 4.8而我正在使用4.7,但我尝试了建议的解决方法并且它有效!
编译-fvar-tracking
允许GDB在分配后打印b的正确值.