Включение pr_debug в программе пользователя Linux? - PullRequest
0 голосов
/ 10 мая 2018

Насколько я знаю, 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, эти сообщения, кажется, нигде не печатаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...