GDB 将断点移动到不同的行
GDB moves breakpoint to different line
我正在使用 GDB 在 MSP430 微处理器上调试 C 代码 运行。
当我使用 break 172
在行 double average = sum / 10;
上设置断点时,它通过响应 Breakpoint 1 at 0xc01c: file main.c, line 172
来确认,但是当我继续使用 c
时,代码运行直到它命中 Breakpoint 1, main () at main.c:184
。
直到最近我才遇到调试问题,所以我尝试将所有内容恢复到以前的版本,但我仍然遇到这个问题。我也试过:
- 关闭和打开我的笔记本电脑。
- 拔下并重新插入与微处理器及其电路相关的每根电缆。
- 关闭并重新打开所有终端 windows。
- 重新编译我的 C 代码并将其重新加载到微处理器中。
- 打印语句来帮助调试不是一种选择,因为微处理器无法保持
#include <stdio.h>
。
- 在设置此断点之前清除所有存在的断点,但找到 none。
代码类似于:
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;
.
行成功设置断点
欢迎任何想法。
如果您使用优化进行编译,"strange" 事情 可能会 发生,请参阅您的编译器文档。这 可能 导致语句被删除或重新排列,并且在调试时会出现令人惊讶的行为。
要调试程序 "by the line",编译时不进行优化。
或者接受惊喜;无论如何,这都是令人愉悦的源泉。
我正在使用 GDB 在 MSP430 微处理器上调试 C 代码 运行。
当我使用 break 172
在行 double average = sum / 10;
上设置断点时,它通过响应 Breakpoint 1 at 0xc01c: file main.c, line 172
来确认,但是当我继续使用 c
时,代码运行直到它命中 Breakpoint 1, main () at main.c:184
。
直到最近我才遇到调试问题,所以我尝试将所有内容恢复到以前的版本,但我仍然遇到这个问题。我也试过:
- 关闭和打开我的笔记本电脑。
- 拔下并重新插入与微处理器及其电路相关的每根电缆。
- 关闭并重新打开所有终端 windows。
- 重新编译我的 C 代码并将其重新加载到微处理器中。
- 打印语句来帮助调试不是一种选择,因为微处理器无法保持
#include <stdio.h>
。 - 在设置此断点之前清除所有存在的断点,但找到 none。
代码类似于:
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;
.
欢迎任何想法。
如果您使用优化进行编译,"strange" 事情 可能会 发生,请参阅您的编译器文档。这 可能 导致语句被删除或重新排列,并且在调试时会出现令人惊讶的行为。
要调试程序 "by the line",编译时不进行优化。
或者接受惊喜;无论如何,这都是令人愉悦的源泉。