我在C ++中实现了print_array函数,并使用gdb来调试它。在for循环中似乎存在问题,但我真的无法理解为什么。
代码是:
void print_array(const int array[], const int length) {
cout << "[";
for (int i=0; i<length; i++) {
// Last element
if (i == length-1) {
cout << array[i] << "]" << endl;
} else {
// Any other element
cout << array[i] << ", ";
}
}
cout << endl;
}
主要功能是:
int main() {
int array[] = {1, 3, 5, 7, 9, 15, 15, 16, 40, 70};
int length = 10;
cout << "Array is = ";
print_array(array, length);
.
.
.
使用gdb进行调试,并将其设置为观看i,我得到以下内容
.
.
.
Thread 2 hit Hardware watchpoint 4: i
Old value = 9
New value = 10
0x0000000100001afd in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {
(gdb)
No frame is currently executing in specified block
0x0000000100001b02 in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {
(gdb)
No frame is currently executing in specified block
Command aborted.
(gdb)
要检查的基本事项是遍历数组的for循环,这似乎并非如此(除非我错过了一些明显的东西)。
&#34;真正的原因&#34;要问这个问题,gdb似乎总体上给出了奇怪的结果。我已安装在Mac 10.12.3中,但没有支持。因此,安装很冗长,我在网上看到其他类似的案例,人们在Mac 10.12.3上安装gdb后遇到了奇怪的问题。
答案 0 :(得分:1)
“当前没有帧在指定的块中执行&#34;意味着gdb试图从不属于应用程序框架的内存地址读取。
此时调试:
Thread 2 hit Hardware watchpoint 4: i
Old value = 9
New value = 10
0x0000000100001afd in print_array (array=0x7fff5fbff8e0, length=10) at binary_search.cpp:8
8 for (int i=0; i<length; i++) {
循环条件不再为真,应用程序想要在for循环后继续。但是GDB仍然在关注i
所在的内存地址。
使用delete 4
删除硬件观察点,应该可以继续调试。