从在Visual Studio中调试C#到GDB,我注意到在设置断点之后踩到时,GDB"跳过"结束块,其他块或其他代码的大括号。虽然Visual Studio经历了完整的路径,但能够查看"发生的所有事情"。
例如,如果我写:
if (1) {
int a = 0;
}
else {
int b = 0;
}
在Visual Studio / C#中,调试器将遍历第1,2,3,4行,最后是6行,然后继续。
在GDB / C中,调试器将经过1,2,然后跳过第3,4和6行,然后转到其余代码。
我试图研究禁用优化或范围步长,但这些似乎与此行为无关。
这就是我编写程序的方式:
gcc -g -O0 src/main.c src/parser.c -o bin/masc
我观察GDB(或Visual Studio)固有的东西吗?是否可以选择在GDB中更改此行为?
答案 0 :(得分:0)
它跳过:
else {
int b = 0;
}
因为在这种情况下,它将永远不会执行,并且会在编译过程中被丢弃以提高效率。