Насколько я знаю, pr_debug
предназначен для распечаток ядра Linux.
Ожидаемое поведение, которое я видел, это то, что сначала мы проверяем распечатки в доступных функциях ядра через /sys/kernel/debug/dynamic_debug/control
:
$ sudo grep class_release /sys/kernel/debug/dynamic_debug/control
drivers/base/class.c:55 [class]class_release =_ "class '%s': release.\012"
drivers/base/class.c:61 [class]class_release =_ "class '%s' does not have a release() function, be careful\012"
... и затем мы включаем эти распечатки через:
$ sudo bash -c "echo 'file drivers/base/class.c +p' > /sys/kernel/debug/dynamic_debug/control"
... и после этого всякий раз, когда вызывается данная функция ядра, мы получаем распечатку в dmesg
или /var/log/syslog
.
Однако я только что понял, что в программах пользовательского пространства есть операторы pr_debug
, в частности perf
- например, здесь: https://github.com/raspberrypi/linux/blob/rpi-4.14.y/tools/perf/builtin-probe.c#L70
(В этом коде также есть pr_warning
операторы - но все они, похоже, печатаются без проблем в выводе программы на стандартный вывод)
Итак, я видел https://www.kernel.org/doc/local/pr_debug.txt:
Some files call pr_debug(), which is ordinarily an empty macro that discards
its arguments at compile time. To enable debugging output, build the
appropriate file with -DDEBUG by adding
CFLAGS_[filename].o := -DDEBUG
to the makefile.
Правильно - поэтому я добавил следующее в https://github.com/raspberrypi/linux/blob/rpi-4.14.y/tools/perf/Makefile ->, затем перезапустил make ARCH=arm
, как это происходит в Raspbian 9 ... и - без изменений, perf
имеет тот же размер, что и это было до попытки включить отладку, и никакие сообщения не печатались ни в stdout, ни в syslog
. Я тоже пробовал
make ARCH=arm CFLAGS+=-DDEBUG
... тоже без изменений.
Так как я могу включить операторы pr_debug
в программе пользовательского пространства, например perf
? И если они включены, где бы я их увидел: в стандартном выводе программы, как в этом случае с pr_warning
- или в dmesg
/ /var/log/syslog
, как типично для сообщений ядра?
РЕДАКТИРОВАТЬ: Я также попытался добавить #define DEBUG
в соответствующие файлы .c и перекомпилировать - опять же, ни один из этих pr_debug
нигде не печатается.
Таким образом, чтобы уточнить и иметь более четкое формулирование проблемы: желаемое поведение состоит в том, что операторы pr_debug
печатаются где-то (либо в stdout, либо в syslog
), когда я запускаю perf
- текущее поведение таково, что когда я запускаю perf
, эти сообщения, кажется, нигде не печатаются.