gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:25 26 4
gpt4 key购买 nike

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

一般情况下,被调试的程序能够在设置的断点处停止。但是,使用 nextstep 的单步执行在大多数情况下都有效,但在代码的某些位置除外。特别是,我发现一直给我带来问题的是 switch block 。例如。

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 行放置断点,程序可以在该行正确停止。

有人遇到过吗?问题出在哪里?我该如何解决此问题?

谢谢。

最佳答案

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

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

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

关于c - GDB 远程调试在某些时候不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43158960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com