我正在努力彻底理解我在Github上找到的代码。我在Eclipse上运行此代码(版本:3.6.1 构建ID:M20100909-0800)。
我想有效地调试这些代码行:
for (index_X = 0; index_X < nb_MCU_X; index_X++) {
for (index_Y = 0; index_Y < nb_MCU_Y; index_Y++) {
for (index = 0; index < SOS_section.n; index++) {
uint32_t component_index = component_order[index];
int nb_MCU = ((SOF_component[component_index].HV >> 4) & 0xf) * (SOF_component[component_index].HV & 0x0f);
for (chroma_ss = 0; chroma_ss < nb_MCU; chroma_ss++) {
unpack_block(movie, & scan_desc, index, MCU);
iqzz_block(MCU, unZZ_MCU, DQT_table[SOF_component[component_index].q_table]);
IDCT(unZZ_MCU, YCbCr_MCU_ds[component_index] + (64 * chroma_ss));
}
upsampler(YCbCr_MCU_ds[component_index], YCbCr_MCU[component_index],
max_ss_h / ((SOF_component[component_index].HV >> 4) & 0xf), max_ss_v / ((SOF_component[component_index].HV) & 0xf), max_ss_h, max_ss_v);
}
if (color && (SOF_section.n > 1)) {
YCbCr_to_ARGB(YCbCr_MCU, RGB_MCU, max_ss_h, max_ss_v);
} else {
to_NB(YCbCr_MCU, RGB_MCU, max_ss_h, max_ss_v);
}
screen_cpyrect(index_Y * MCU_sy * max_ss_h, index_X * MCU_sx * max_ss_v, MCU_sy * max_ss_h, MCU_sx * max_ss_v, RGB_MCU);
}
}
上面的代码包含许多循环,并且多次遍历每行代码是费力的(nb_MCU_X
是18而nb_MCU_Y
是32)。
我尝试在调试模式下更改index_X
和index_Y
的值。我认为这样做会带我到程序中的一个点,在那里将处理更多的代码。但是,只有index_X
和index_Y
更改为我给出的值,但所有其他相关值都没有随之更改。因此,程序的行为被扭曲,并开始表现不正常。
我尝试在此部分代码后立即设置断点。但是,它不允许我看到在处理上述代码部分之后发生的下一步。我想立即知道当index_X
或index_Y
处于我选择的任何值时代码的状况。
Eclipse中有没有办法让 及时转发 并处理更多迭代而不是跨越代码的每一行?
例如,如果index_Y
当前为0,我该怎么办?但是我想立即到达index_Y
为7的程序中的某一点,其余代码也相应地更改?