Отладчик становится странным? - PullRequest
2 голосов
/ 23 июля 2010
#include<stdio.h>
#include<string.h>

int main(void)
{
   int f;
   char duma[] = "asd char";

   f = strlen(duma);
}

Таким образом, когда я запускаю его в отладчике и в таблице «наблюдения» типа strlen (data), его возвращение сообщения, такого как strlen (), не существует или что-то в этом роде, однако это означает, что strlen не существует, однако в местных жителях f = strlen (Дума) я имею в виду, что это делает вычисления и показывает мне число символов в массиве. В Immediate его так же, как в часах strlen не существует ...

Итак, любые предложения, как я могу это исправить ???

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 23 июля 2010

«Часы» предназначены для переменных, а не для функций, за некоторыми исключениями.В общем, вы не хотите помещать функции в окно наблюдения, потому что они могут иметь побочные эффекты и изменять состояние вашей программы каждый раз, когда они отображаются.

Для такого кода вы должны поставить fв окне просмотра, а не strlen(duma).

1 голос
/ 23 июля 2010

strlen - это функция, а не переменная.Отладчик должен будет вызывать функцию каждый шаг, чтобы обновить правильное значение.Это было бы не очень эффективно.В любом случае, отладчик требует от вас ввода имен переменных, а не функций.

0 голосов
/ 23 июля 2010

Если вы сомневаетесь в том, что вы не можете войти в функцию strlen, то причина в том, что strlen из стандартной библиотеки, и вы не можете войти в эту функцию, поскольку они обычно лишены отладочных символов.

Пользовательопределенные функции компилируются с опциями для сохранения символов отладки, и, следовательно, вы можете войти в эти вызовы функций и построчно просматривать их выполнение.

To have symbols from these routines available, you must satisfy two 
requirements for GDB:
     *  You must have debug versions of the libraries available.
     *  GDB must know where to find them.

И, как указали другие, вы не можете следить за функциямиВы можете наблюдать за переменными, чтобы знать, когда их состояние изменяется.

0 голосов
/ 23 июля 2010

Возможно, вы столкнулись со следующим ограничением в оценщике выражений отладчика:

  • Выражение отладчика не может вызывать встроенную или встроенную функцию, если функция не появится хотя бы один раз как нормальная функция (из *)1004 *http://msdn.microsoft.com/en-us/library/0888kc6a.aspx)

Редактировать:

Не думаю, что я прав насчет «внутренней» части. Сначала я тестировал с VS2010 (что и было у меня)наиболее легко доступны) - VS2010, похоже, может без проблем оценить strlen(duma).

Когда я перешел на компьютер, на котором было установлено VS2008 (извините - VS2005 сейчас не установлен ...)отладчик не смог оценить strlen(duma) независимо от того, являются ли параметры strlen() внутренними или нет.


Еще одно редактирование :

В VS2008Я не смог получить strlen(duma) для оценки в окне просмотра отладчика, однако я смог получить myStrlen(duma) для оценки в окне просмотра, где myStrlen() была очевидной оболочкой, которая ничего не делала, кроме возврата strlen().Это может быть гореrkaround для вас (или вы можете обновить до VS2010).

...