2017-02-21 2 views
2

Я реализую функцию print_array в C++ и использовал 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, для которого нет поддержки, как есть. Таким образом, установка была длительной, и я видел другие подобные случаи в Интернете, где люди столкнулись с странными проблемами после установки gdb на Mac 10.12.3.

+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++) { 

петля условия уже не так и приложение хочет продолжить после цикла для-. Но GDB еще смотрит на память-адрес, где i был.

Удалить аппаратную точку наблюдения с delete 4, и можно продолжить отладку.

+0

Я отредактировал свой ответ, чтобы уточнить его. Я думаю, что он отвечает на вопрос. Повторите еще раз. Если это не так, я рад удалить его. –

+0

Упс, мой плохой, я, вероятно, ошибся при просмотре, потому что я даже не помню, чтобы проверить этот ответ! Я удалил комментарий! –

Смежные вопросы