состояние программы на C - PullRequest
0 голосов
/ 05 июля 2019

Я только начал программировать на 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 внутри блока (если) после вычисления.

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

Ответы [ 4 ]

2 голосов
/ 05 июля 2019

GDB - лучший инструмент для вас. Пока программа запущена, вы можете видеть значения переменных. Пожалуйста, выполните следующие действия:

скомпилируйте вашу программу с флагом -g.

gcc -g program.c -o output

Теперь запустите вашу программу с GDB:

gdb output

В командной строке Gdb установите точку останова на 'main', используя:

(gdb) b main

или используйте значение ниже единицы, чтобы установить точку останова на определенной строке.

(gdb) b line_number

теперь введите 'r' для запуска программы.

(gdb) r

введите 'n' и нажмите ввод, чтобы перейти к следующей строке

(gdb) n 

введите 'step', чтобы войти в функцию:

(gdb) step 

Проверьте значение переменной, используя

(gdb) print variable-name

Удерживайте точку останова в 'line no', где вы хотите увидеть значение переменной, и используйте 'print variable-name', чтобы просмотреть значение.

Пожалуйста, примите это как ссылку для других команд GDB: http://www.yolinux.com/TUTORIALS/GDB-Commands.html

Надеюсь, этот ответ поможет вам отладить ваш код.

1 голос
/ 05 июля 2019

Я думаю, вы можете использовать что-то вроде этого

printf("%d\n",x);

после каждого выражения с

x= ...

в вашей функции. Или Вы можете использовать fprintf для записи значений в файл вместо printf , если не хотите выводить значения на консоль.

0 голосов
/ 05 июля 2019

Другой подход, расширяющий использование printf, заключается в использовании отладочных макросов или функций. Например. см:

https://github.com/jleffler/soq/blob/master/src/libsoq/debug.c

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

0 голосов
/ 05 июля 2019

Используйте отладчик (установите любую C IDE, например Eclipse CDT, и вам не нужно ничего настраивать)

Вы можете даже сделать отладку онлайн https://www.onlinegdb.com/

...