Уровень лога условный?

Я решил, установив time_zone вручную в settings.py

TIME_ZONE='Africa/Casablanca'
0
задан Peter Uithoven 18 January 2019 в 20:42
поделиться

1 ответ

Если вы хотите добавить свой код в операторы отладки, вы можете проверить переменную среды:

void main () {
    if (Environment.get_variable ("G_DEBUG") == "fatal-criticals") {
        print ("Debug code\n");
    }
}

Опытный кодировщик предложил бы использовать отладчик для пошагового выполнения кода. Это означает, что вам не нужно добавлять дополнительные операторы только для отладки, но с Vala это немного сложно. Вот пример. Программа Vala:

void main () {
    var a = "before";
    var b = Test.run (a);
    print (@"$(b)\n");
}

namespace Test {
    string run (string a) {
        return "after";
    }
}

Компилировать с:

valac function_breakpoint_example.vala --debug -X -O0 --save-temps

--debug включает номера строк для кода Vala в сгенерированном C. -X -O0 передает -O0 в Компилятор C, поэтому информация не оптимизирована. --save-temps сохраняет временные файлы C, сгенерированные Vala, чтобы отладчик мог ссылаться на них.

Теперь запустите отладчик gdb:

gdb ./function_breakpoint_example
...enters gdb...
break test_run
run
# Program runs and then stops when Test.run is entered
step
# or `cont` if you want to continue on to the end of the program

Вам необходимо понять, как Vala преобразует имена своих символов в имена символов C. В этом примере используется пространство имен, поэтому Test.run преобразуется в функцию test_run в C. break test_run говорит GDB прекратить запуск программы при вызове этой функции.

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

break function_breakpoint_example.vala:9

Существует целый ряд команд для получения дополнительной информации, таких как трассировка полного стека или печать локальных переменных. info args покажет аргументы, переданные функции, p a покажет содержимое переменной a и info locals выведет локальные переменные. Некоторая напечатанная информация будет более понятной, чем другая.

Другой вариант, который снова добавляет операторы в ваш код, - это использование директивы Vala pre-parser. Это останавливает Vala, пропуская код через весь процесс компиляции, если условие не установлено. Например:

void main () {

#if DEBUG
    print ("debugging...\n");
#endif

}

при компиляции с:

valac pre_parser_directive.vala -D DEBUG

будет включать оператор print в сгенерированный C. Без -D DEBUG эта часть кода Vala не будет быть проанализирован и поэтому он не появляется в конечном выводе.

0
ответ дан AlThomas 18 January 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: