Я решил, установив time_zone вручную в settings.py
TIME_ZONE='Africa/Casablanca'
Если вы хотите добавить свой код в операторы отладки, вы можете проверить переменную среды:
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 не будет быть проанализирован и поэтому он не появляется в конечном выводе.