# Debug configuration options
# Copyright (c) 2015 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0
menu "System Monitoring Options"
bool "Boot time measurements"
depends on ARCH_POSIX || ARM || (X86 && APIC_TIMER && APIC_TIMER_TSC)
This option enables the recording of timestamps during system boot.
bool "Statistics support"
Enable per-module event counters for troubleshooting, maintenance,
and usage monitoring. Statistics can be retrieved with the mcumgr
bool "Statistic names"
depends on STATS
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.
menu "Debugging Options"
bool "Build kernel with debugging enabled"
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.
bool "Enabling Tracing"
Enable system tracing. This requires a backend such as SEGGER
Systemview to be enabled as well.
bool "Build with address sanitizer"
depends on ARCH_POSIX
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.
bool "Build with undefined behavior sanitizer"
depends on ARCH_POSIX
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.
bool "Generate stack usage information"
Generate an extra file that specifies the maximum amount of stack used,
on a per-function basis.
bool "Enable stack sentinel"
depends on !USERSPACE
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
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
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.
bool "Send printk() to console"
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.
int "printk() buffer size"
depends on PRINTK
depends on USERSPACE
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.
bool "Send stdout at the earliest stage possible"
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.
bool "Enable __ASSERT() macro"
default y if TEST
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.
int "__ASSERT() level"
range 0 2
depends on ASSERT
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
bool "Force-disable no assertions"
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.
bool "Disable file info for asserts"
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.
bool "Kernel object tracing"
This option enable the feature for tracing kernel objects. This option
is for debug purposes and increases the memory footprint of the kernel.
bool "Override compiler defaults for -fomit-frame-pointer"
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
Choose Y if you want to override the default frame pointer behavior
of your compiler, otherwise choose N.
bool "Omit frame pointer"
depends on OVERRIDE_FRAME_POINTER_DEFAULT
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
bool "Enable system debugging information"
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.
bool "Attempt to print stack traces upon exceptions"
depends on PRINTK
depends on DEBUG_INFO
depends on !OMIT_FRAME_POINTER
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
bool "OpenOCD support [EXPERIMENTAL]"
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.)
bool "Enable CPU usage tracing"
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
bool "Enable current CPU usage logging"
depends on TRACING_CPU_STATS
Periodically displays information about CPU usage.
int "Logging interval for CPU measurements [ms]"
depends on TRACING_CPU_STATS_LOG
Time period of displaying information about CPU usage.
bool "Tracing via Common Trace Format support"
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.
bool "CTF backend for the native_posix port, using a file in the host filesystem"
depends on TRACING_CTF
depends on ARCH_POSIX
Enable POSIX backend for CTF tracing. It will output the CTF stream to a
file using fwrite.