gdb控件跳转到随机位置
gdb control jumping to random position
以下是我想要调试的代码片段:当我尝试使用GDB进行调试时,在循环越过for i = 0
之后,它不会跳到循环for i = 1
内的第一行。相反,它跳到中间的另一行,然后跳到第一行。我不知道为什么以及如何修复它。请给我你的意见。
for(i = 0; i < fileSum; i++)
{
char *fileName ; //= NULL;
// fileName = GetFileName(dataset->groundTruthFolder, trainImageFiles[i], dataset->groundTruthExtension);
fileName = new char[strlen(dataset->groundTruthFolder) + strlen(trainImageFiles[i]) + strlen(dataset->groundTruthExtension) + 1];
sprintf(fileName, "%s%s%s", dataset->groundTruthFolder, trainImageFiles[i], dataset->groundTruthExtension);
printf("GetFileName: fileName-%s n", fileName);
LLabelImage groundTruth(fileName, domain);
// delete[] fileName;
// fileName = NULL;
int width = groundTruth.GetWidth(), height = groundTruth.GetHeight();
int subWidth = (width + subSample - 1) / subSample;
int subHeight = (height + subSample - 1) / subSample;
for(k = 0; k < subHeight; k++) for(j = 0; j < subWidth; j++)
{
unsigned char gtVal = groundTruth(j * subSample, k * subSample, 0);
if(gtVal > 0) classCounts[gtVal - 1]++, total++;
printf("k = %d,j = %d, gtVal = %dn", k, j, gtVal);
}
int dummy = 0;
printf("i = %dn", i);
}
以下是gdb控制台的快照:
Breakpoint 2, LDenseUnaryPixelPotential::InitTrainData (this=0x80aad08, trainImageFiles=...) at potential.cpp:665
665 int dummy = 0;
(gdb) n
666 printf("i = %dn", i);
(gdb) n
i = 1
650 LLabelImage groundTruth(fileName, domain);
(gdb) n
640 for(i = 0; i < fileSum; i++)
(gdb) n
Breakpoint 1, LDenseUnaryPixelPotential::InitTrainData (this=0x80aad08, trainImageFiles=...) at potential.cpp:645
645 fileName = new char[strlen(dataset->groundTruthFolder) + strlen(trainImageFiles[i]) + strlen(dataset->groundTruthExtension) + 1];
(gdb)
请注意,控件从666变为650,然后变为640,而不是直接从666变成640。
以前,我使用-g选项进行编译,现在使用-g-O0选项进行编译。同样的问题仍然存在。
这是我的Makefile:
CC = g++
OBJS = main.o
SOURCES = main.cpp
LIBS = -lIL -pthread
EXE = ale
FLAGS = -g -O0 -Wno-write-strings
$(EXE): .
$(CC) $(FLAGS) -c $(SOURCES) -o $(OBJS)
$(CC) -o $(EXE) $(OBJS) $(LIBS)
clean:
rm -rf *.o ale
实际上,我进行了进一步的调试,发现当控件到达循环的末尾时,会调用"LLabelImage"的析构函数来删除数据。
当我尝试使用GDB进行调试时,在I=0的循环结束后,它不会跳到I=1的循环内的第一行。
-O0
编译的代码不应该出现这种情况。
要么是不是真的那样编译(如果你编译了一个可执行文件,但错误地调试了另一个,可能会发生这种情况),要么是你的GCC坏了,生成了错误的调试行信息。
相关文章:
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 如何在 3x4 数组中随机 4 个不同的位置
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 在长字符串(随机位置)中的C char搜索
- 动态分配存储数据在堆中的随机位置中
- C 2D char阵列有时会在随机位置复制数据
- 在圆内的框外的随机位置
- 如何在c++中从txt文件的随机位置读取数据
- 如何在随机位置用特定数量的 1 和 0 填充数组?
- 在随机位置产卵怪物
- 在随机位置生成QPush按钮的计时器
- 最佳的c++方式来随机选择设置位在位集中的位置
- 二进制输出到C++中随机位置的文件
- 初始化随机生成器的最佳位置
- gdb控件跳转到随机位置
- 从随机起始位置开始的螺旋阵列
- 如何将元素添加到二维数组/矩阵的随机位置
- C++程序在随机位置无缘无故地停止
- 从数组中的随机位置复制到另一个数组
- 我想得到一组唯一的n*n数组,这些数组在c++中的随机位置只包括0或1