"当前没有帧在指定的块中执行" gdb上的错误

时间:2017-02-21 15:20:48

标签: c++ gdb

我在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后遇到了奇怪的问题。

1 个答案:

答案 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删除硬件观察点,应该可以继续调试。