GDB远程调试不会在某些时候停止

时间:2017-04-01 15:57:10

标签: c debugging gdb gdbserver

我正在使用ARM9平台上的gdb和gdbserver进行远程调试。这两个程序都是在Ubuntu系统上编译的,并使用交叉编译器编译gdbserver。

通常,调试下的程序能够在设定的断点处停止。但是,除了代码的某些位置外,使用nextstep的单步执行大部分时间都有效。特别是,我发现一直给我带来问题的是switch块。例如。

1    inchar = getchar();
2
3    switch (inchar)
4    {
5        case 'a':
6            ....
7            break;
8        case 'b':
9            ....
10           break;
11       case 'c':
12           ....
13           break;
14   }

如果我在第1行设置断点,程序将在此行停止而不会出现问题。但是,如果我随后使用nextstep,则在点击第3行后,下一步将不会导致程序在任何一种情况下停止。相反,它会继续运行,直到下一个断点被击中或直到我执行ctrl-c。

但是,如果我在第6行(例如)放置断点,而没有第1行的断点,程序可以在此行正确停止。

有没有人遇到过这个?问题出在哪里?我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

首先,禁用优化。它们可能导致编译器交换某些行,或者如果您错误地创建了不运行的代码,则省略整个部分,例如。

bool condition = false;
xxx;
if (condition)
   printf("this code will not run");

默认的优化级别是-O2,调试的最佳选项是-Og。尝试寻找并改变它们。