| # Kconfig - debug configuration options |
| |
| # |
| # Copyright (c) 2015 Wind River Systems, Inc. |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| |
| menu "System Monitoring Options" |
| |
| config PERFORMANCE_METRICS |
| bool "Enable performance metrics [EXPERIMENTAL]" |
| help |
| Enable Performance Metrics. |
| |
| config BOOT_TIME_MEASUREMENT |
| bool "Boot time measurements [EXPERIMENTAL]" |
| depends on PERFORMANCE_METRICS |
| help |
| This option enables the recording of timestamps during system start |
| up. The global variable __start_time_stamp records the time kernel begins |
| executing, while __main_time_stamp records when main() begins executing, |
| and __idle_time_stamp records when the CPU becomes idle. All values are |
| recorded in terms of CPU clock cycles since system reset. |
| |
| config CPU_CLOCK_FREQ_MHZ |
| int "CPU Clock Frequency in MHz" |
| default 20 |
| depends on BOOT_TIME_MEASUREMENT |
| help |
| This option specifies the CPU Clock Frequency in MHz in order to |
| convert Intel RDTSC timestamp to microseconds. |
| |
| 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 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" |
| 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 |
| 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 |