c - GDB 将断点移动到不同的行
问题描述
我正在使用 GDB 调试在 MSP430 微处理器上运行的 C 代码。
double average = sum / 10;
当我在使用的行上设置断点时break 172
,它会通过响应来确认Breakpoint 1 at 0xc01c: file main.c, line 172
,但是当我继续时c
,代码会一直运行直到命中Breakpoint 1, main () at main.c:184
。
直到最近我才遇到调试问题,所以我尝试将所有内容恢复到以前的版本,但我仍然遇到这个问题。我也试过:
- 关闭和打开我的笔记本电脑。
- 拔下并重新插入与微处理器及其电路相关的每条电缆。
- 关闭并重新打开所有终端窗口。
- 重新编译并将我的 C 代码重新加载到微处理器中。
- 打印语句来帮助调试不是一个选项,因为微处理器不能保持
#include <stdio.h>
. - 在设置此断点之前清除所有存在的断点,但没有找到。
代码看起来像:
void main(void)
{
OtherMethod();
while(1)
{
int sum = 0;
for(int i = 0; i < 10; i++)
{
sum += i;
}
double average = sum / 10; // Line 172
}
}
void OtherMethod(void)
{
P1DIR |= LED1 + LED2; // Line 184
}
其他可能有用的信息是我可以成功地在行上设置断点sum += i;
。
任何想法表示赞赏。
解决方案
如果您使用优化进行编译,可能会发生一些“奇怪”的事情,请参阅编译器的文档。这可能会导致语句被删除或重新排列,并且在调试时会出现令人惊讶的行为。
要“逐行”调试程序,无需优化即可编译。
或与惊喜一起生活;无论如何,它是快乐的源泉。
推荐阅读
- r - 如何在R中格式化SPEI包的硬编码绘图功能的x轴?
- eslint - ESLint 抱怨 ESLint 插件没有安装在 monorepo 中
- excel - 我不确定我的代码在 vlookup 上有什么问题
- c - 在执行线程时更改 C 线程参数
- regex - 用于匹配 lucene 中任意 2 个字母 + 任意 6 个数字的正则表达式
- python - 从 qt-designer ui 文件以编程方式添加到由 pyuic 创建的窗口
- r - 使用 sp::merge() 作为函数在 R 中拆分应用和组合的更好方法
- python - 一个如何通过不同而不是相似来聚类?使用反欧几里得距离是否可以接受?
- php - 如何根据值在 HTML 单元格中添加类
- python-3.x - 如何使用大量双引号分散数据,这些双引号在熊猫中仅堆叠成一列