Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

# Debug configuration options

# Copyright (c) 2015 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0

menu "System Monitoring Options"

config BOOT_TIME_MEASUREMENT
	bool "Boot time measurements"
	depends on ARCH_POSIX || ARM || (X86 && APIC_TIMER && APIC_TIMER_TSC)
	help
	  This option enables the recording of timestamps during system boot.

config STATS
	bool "Statistics support"
	help
	  Enable per-module event counters for troubleshooting, maintenance,
	  and usage monitoring.  Statistics can be retrieved with the mcumgr
	  management subsystem.

config STATS_NAMES
	bool "Statistic names"
	depends on STATS
	help
	  Include a full name string for each statistic in the build.  If this
	  setting is disabled, statistics are assigned generic names of the
	  form "s0", "s1", etc.  Enabling this setting simplifies debugging,
	  but results in a larger code size.
endmenu

menu "Debugging Options"

config DEBUG
	bool "Build kernel with debugging enabled"
	help
	  Build a kernel suitable for debugging.  Right now, this option
	  only disables optimization, more debugging variants can be selected
	  from here to allow more debugging.

config TRACING
	bool "Enabling Tracing"
	help
	  Enable system tracing. This requires a backend such as SEGGER
	  Systemview to be enabled as well.

config ASAN
	bool "Build with address sanitizer"
	depends on ARCH_POSIX
	help
	  Builds Zephyr with Address Sanitizer enabled. This is currently
	  only supported by boards based on the posix architecture, and requires a
	  recent-ish compiler with the ``-fsanitize=address`` command line option,
	  and the libasan library.

	  Note that at exit leak detection is disabled for 64-bit boards when
	  GCC is used due to potential risk of a deadlock in libasan.
	  This behavior can be changes by adding leak_check_at_exit=1 to the
	  environment variable ASAN_OPTIONS.

config UBSAN
	bool "Build with undefined behavior sanitizer"
	depends on ARCH_POSIX
	help
	  Builds Zephyr with Undefined Behavior Sanitizer enabled.
	  This is currently only supported by boards based on the posix
	  architecture, and requires a recent-ish compiler with the
	  ``-fsanitize=undefined`` command line option.

config STACK_USAGE
	bool "Generate stack usage information"
	help
	  Generate an extra file that specifies the maximum amount of stack used,
	  on a per-function basis.

config STACK_SENTINEL
	bool "Enable stack sentinel"
	select THREAD_STACK_INFO
	depends on !USERSPACE
	help
	  Store a magic value at the lowest addresses of a thread's stack.
	  Periodically check that this value is still present and kill the
	  thread gracefully if it isn't. This is currently checked in four
	  places:

	  1) Upon any context switch for the outgoing thread
	  2) Any hardware interrupt that doesn't context switch, the check is
	     performed for the interrupted thread
	  3) When a thread returns from its entry point
	  4) When a thread calls k_yield() but doesn't context switch

	  This feature doesn't prevent corruption and the system may be
	  in an unusable state. However, given the bizarre behavior associated
	  with stack overflows, knowledge that this is happening is very
	  useful.

	  This feature is intended for those systems which lack hardware support
	  for stack overflow protection, or have insufficient system resources
	  to use that hardware support.

config PRINTK
	bool "Send printk() to console"
	default y
	help
	  This option directs printk() debugging output to the supported
	  console device, rather than suppressing the generation
	  of printk() output entirely. Output is sent immediately, without
	  any mutual exclusion or buffering.

config PRINTK_BUFFER_SIZE
	int "printk() buffer size"
	depends on PRINTK
	depends on USERSPACE
	default 32
	help
	  If userspace is enabled, printk() calls are buffered so that we do
	  not have to make a system call for every character emitted. Specify
	  the size of this buffer.

config EARLY_CONSOLE
	bool "Send stdout at the earliest stage possible"
	help
	  This option will enable stdout as early as possible, for debugging
	  purpose. For instance, in case of STDOUT_CONSOLE being set it will
	  initialize its driver earlier than normal, in order to get the stdout
	  sent through the console at the earliest stage possible.

config ASSERT
	bool "Enable __ASSERT() macro"
	default y if TEST
	help
	  This enables the __ASSERT() macro in the kernel code. If an assertion
	  fails, the policy for what to do is controlled by the implementation
	  of the assert_post_action() function, which by default will trigger
	  a fatal error.

	  Disabling this option will cause assertions to compile to nothing,
	  improving performance and system footprint.

config ASSERT_LEVEL
	int "__ASSERT() level"
	default 2
	range 0 2
	depends on ASSERT
	help
	  This option specifies the assertion level used by the __ASSERT()
	  macro. It can be set to one of three possible values:

	  Level 0: off
	  Level 1: on + warning in every file that includes __assert.h
	  Level 2: on + no warning

config FORCE_NO_ASSERT
	bool "Force-disable no assertions"
	help
	  This boolean option disables Zephyr assertion testing even
	  in circumstances (sanitycheck) where it is enabled via
	  CFLAGS and not Kconfig.  Added solely to be able to work
	  around compiler bugs for specific tests.

config ASSERT_NO_FILE_INFO
	bool "Disable file info for asserts"
	help
	  This option removes the name and the path of the source file
	  in which the assertion occurred. Enabling this will save
	  target code space, and thus may be necessary for tiny targets.

config OBJECT_TRACING
	bool "Kernel object tracing"
	help
	  This option enable the feature for tracing kernel objects. This option
	  is for debug purposes and increases the memory footprint of the kernel.

config OVERRIDE_FRAME_POINTER_DEFAULT
	bool "Override compiler defaults for -fomit-frame-pointer"
	help
	  Omitting the frame pointer prevents the compiler from putting the stack
	  frame pointer into a register. Saves a few instructions in function
	  prologues/epilogues and frees up a register for general-purpose use,
	  which can provide good performance improvements on register-constrained
	  architectures like x86. On some architectures (including x86) omitting
	  frame pointers impedes debugging as local variables are harder to
	  locate. At -O1 and above gcc will enable -fomit-frame-pointer
	  automatically but only if the architecture does not require if for
	  effective debugging.

	  Choose Y if you want to override the default frame pointer behavior
	  of your compiler, otherwise choose N.

config OMIT_FRAME_POINTER
	bool "Omit frame pointer"
	depends on OVERRIDE_FRAME_POINTER_DEFAULT
	help
	  Choose Y for best performance. On some architectures (including x86)
	  this will favor code size and performance over debugability.

	  Choose N in you wish to retain the frame pointer. This option may
	  be useful if your application uses runtime backtracing and does not
	  support parsing unwind tables.

	  If unsure, disable OVERRIDE_FRAME_POINTER_DEFAULT to allow the compiler
	  to adopt sensible defaults for your architecture.


#
# Generic Debugging Options
#
config DEBUG_INFO
	bool "Enable system debugging information"
	help
	  This option enables the addition of various information that can be
	  used by debuggers in debugging the system, or enable additional
	  debugging information to be reported at runtime.

config EXCEPTION_STACK_TRACE
	bool "Attempt to print stack traces upon exceptions"
	default y
	depends on PRINTK
	depends on DEBUG_INFO
	depends on !OMIT_FRAME_POINTER
	help
	  If the architecture fatal handling code supports it, attempt to
	  print a stack trace of function memory addresses when an
	  exception is reported.

#
# Miscellaneous debugging options
#

config OPENOCD_SUPPORT
	bool "OpenOCD support [EXPERIMENTAL]"
	select THREAD_MONITOR
	select THREAD_NAME
	help
	  This option exports an array of offsets to kernel structs, used by
	  OpenOCD to determine the state of running threads.  (This option
	  selects CONFIG_THREAD_MONITOR, so all of its caveats are implied.)

config TRACING_CPU_STATS
	bool "Enable CPU usage tracing"
	select THREAD_MONITOR
	select THREAD_STACK_INFO
	select TRACING
	help
	  Module provides information about percent of CPU usage based on
	  tracing hooks for threads switching in and out, interrupts enters
	  and exits (only distinguishes between idle thread, non idle thread
	  and scheduler). Use provided API or enable automatic logging to
	  get values.

config TRACING_CPU_STATS_LOG
	bool "Enable current CPU usage logging"
	depends on TRACING_CPU_STATS
	help
	  Periodically displays information about CPU usage.

config TRACING_CPU_STATS_INTERVAL
	int "Logging interval for CPU measurements [ms]"
	default 2000
	depends on TRACING_CPU_STATS_LOG
	help
	  Time period of displaying information about CPU usage.

config TRACING_CTF
	bool "Tracing via Common Trace Format support"
	select THREAD_MONITOR
	select TRACING
	help
	  Enable tracing to a Common Trace Format stream. In order to use it a
	  CTF bottom layer should be selected, such as TRACING_CTF_BOTTOM_POSIX.

config TRACING_CTF_BOTTOM_POSIX
	bool "CTF backend for the native_posix port, using a file in the host filesystem"
	depends on TRACING_CTF
	depends on ARCH_POSIX
	help
	  Enable POSIX backend for CTF tracing. It will output the CTF stream to a
	  file using fwrite.


source "subsys/debug/Kconfig.segger"

endmenu