Состояние программы на 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

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

Другие вопросы по тегам