【问题标题】:GDB skipping behaviorGDB 跳过行为
【发布时间】:2018-09-30 10:58:33
【问题描述】:

从在 Visual Studio 中调试 C# 到 GDB 时,我注意到在设置断点后单步执行时,GDB “跳过”块、else 块或其他代码的右大括号。而 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 中更改此行为?

【问题讨论】:

  • 你在gdb中执行了什么命令?你试过breakpoints吗?
  • @Sergio 是的,我已经扩展了问题以包括这个。

标签: c debugging gdb visual-studio-debugging


【解决方案1】:

第 3-7 行没有变化。 C# 调试器的跳转是多余的。 gcc 直接跳转到下一个变化的行。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多