Состояние программы на C
Я только начал программировать на C, и я хочу протестировать некоторый код. Итак, мне нужно знать значение переменной в определенной точке программы, которую я уже знаю.
во время поиска я увидел, что многие люди используют gdb и core dump, но в большинстве примеров, которые я обнаружил, они используют его для отладки кода в случае сбоя. в моем случае я не хочу прекращать выполнение, я просто хочу сохранить / узнать значение определенной переменной в определенной точке.
например:
если у меня есть этот кусок кода:
int func(int x){
x = 3 * x;
if(x > 0){
x = x % 4;
/* I want to know the value of x at this point*/
}
else {
x = x + 1;
/* I want to know the value of x at this point*/
}
return x;
}
если пользователь вводит значение, я хочу знать, каким будет значение x внутри блока (если) после вычисления.
ОБНОВЛЕНИЕ: чтобы прояснить мой вопрос, у меня большой код, и я хочу протестировать весь пакет, и я хочу написать функцию, которая сообщает мне, каково хранимое значение в этой точке программы.
4 ответа
GDB - лучший инструмент для вас. Пока программа запущена, вы можете видеть значения переменных. Пожалуйста, выполните следующие действия:
скомпилируйте вашу программу с флагом -g.
gcc -g program.c -o output
Теперь запустите вашу программу с GDB:
gdb output
В командной строке Gdb установите точку останова на 'main', используя:
(gdb) b main
или используйте ниже единицы, чтобы установить точку останова на определенной строке.
(gdb) b line_number
Теперь введите "R" для запуска программы.
(gdb) r
введите 'n' и нажмите Enter, чтобы перейти к следующей строке
(gdb) n
введите "шаг", чтобы войти в функцию:
(gdb) step
Изучите значение переменной, используя
(gdb) print variable-name
Держите точку останова на "строке нет", где вы хотите увидеть значение переменной и использовать "print variable-name
для просмотра стоимости.
Пожалуйста, примите это как справку для других команд GDB: http://www.yolinux.com/TUTORIALS/GDB-Commands.html
Надеюсь, что этот ответ поможет вам отладить ваш код.
Я думаю, что вы можете использовать что-то вроде этого
printf("%d\n",x);
после каждого выражения с
x= ...
в вашей функции. Или Вы можете использовать fprintf для записи значений в файл вместо printf, если не хотите выводить значения на консоль.
Используйте отладчик (установите любую C IDE, такую как Eclipse CDT, и вам не нужно ничего настраивать)
Вы можете даже сделать отладку онлайн https://www.onlinegdb.com/
Другой подход, расширяющий использование printf, - это использование отладочных макросов или функций. Например, см.:
https://github.com/jleffler/soq/blob/master/src/libsoq/debug.c
Что-то вроде этого можно использовать, чтобы разрешить динамическое включение отладки для некоторых вариантов использования вашей функции, а затем снова отключить ее, чтобы вы не получали слишком много выходных данных для работы при отладке вашего кода.