2017-02-21 33 views
2

我正在C++中實現print_array函數,並且正在使用gdb進行調試。 for循環似乎存在一個問題,但我真的不明白爲什麼。「沒有框架當前正在執行指定的塊」錯誤gdb

的代碼是:

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,並設置它看我,我得到以下

. 
. 
. 
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循環遍歷數組,這似乎不是這種情況(除非我錯過了顯而易見)。

問這個問題的「真正原因」是gdb似乎給出了奇怪的結果。我已經安裝在Mac 10.12.3中,因爲它沒有支持。因此,安裝過程非常漫長,我在網上看到過其他類似的案例,在Mac 10.12.3上安裝gdb後,人們遇到了一些奇怪的問題。

+0

它看起來像你在gdb提示符下輸入一個空行,以重複前面的命令。那是什麼命令? –

+0

我正在逐步完成代碼,但由於gdb重複當您按Enter鍵時使用的最後一個命令,它不會顯示。應該更清楚了(注意!) – mcansado

回答

-1

「否幀當前在指定的塊執行」是指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++) { 

循環條件不再爲true和應用程序需要的for循環後繼續,但GDB仍看內存地址在i了。

刪除硬件檢測點與delete 4,應該可以繼續調試。

+0

我編輯了我的答案來澄清它。我認爲它回答了這個問題。請再次查看。如果不是,我很樂意刪除它。 –

+0

哎呀,我的壞,我可能錯過了審查時,因爲我甚至不記得檢查這個答案!我刪除了評論! –

相關問題