在Linux用户空间程序中启用pr_debug?

时间:2018-05-10 12:10:15

标签: linux debugging

据我所知,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个语句 - 但所有这些语句似乎都在程序的stdout输出中打印出来没有问题)

所以,我见过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语句?如果它们被启用,我会在哪里看到它们:在程序的stdout中,就像在这种情况下的pr_warning一样 - 或在dmesg / /var/log/syslog中,这是典型的内核消息? / p>

编辑:我也尝试将#define DEBUG添加到相关的.c文件中,并重新编译 - 再次,这些pr_debug都不会在任何地方打印。

所以要澄清一下,并且有一个更明确的问题陈述:当我运行pr_debug时,期望的行为是syslog语句在某处(在stdout或perf中)打印 - 目前的行为是,当我运行perf时,这些消息似乎无法在任何地方打印出来。

0 个答案:

没有答案