# Kconfig - debug configuration options # # Copyright (c) 2015 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # 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 the native_posix port, and requires a recent-ish compiler with the `-fsanitize=address` command line option, and the libasan library. 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" depends on CONSOLE_HAS_DRIVER 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 calling thread is put on an infinite tight loop. Since enabling this adds a significant footprint, it should only be enabled in a non-production system. 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 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 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.) endmenu