---
name: "stack_printf"
section: "9freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "7.0-2"
release: "Debian 5.0 (Lenny)"
platforms: ["linux"]
url: "https://new.carta.tech/stack_printf"
---

# stack\_printf(9freebsd)

kernel thread stack tracing routines

## NAME

**stack** – kernel thread stack tracing routines

## SYNOPSIS

**#include \<sys/param.h\>\>**

**#include \<sys/stack.h\>**

In kernel configuration files: **options DDB**

*struct* *stack* *\**\

**stack\_create**(*void*);

*void*\

**stack\_destroy**(*struct stack \*st*);

*int*\

**stack\_put**(*struct stack \*st*, *vm\_offset\_t pc*);

*void*\

**stack\_copy**(*struct stack \*src*, *struct stack dst*);

*void*\

**stack\_zero**(*struct stack \*st*);

*void*\

**stack\_print**(*struct stack \*st*);

*void*\

**stack\_sbuf\_print**(*struct sbuf sb\**, *struct stack \*st*);

*void*\

**stack\_save**(*struct stack \*st*);

## DESCRIPTION

The **stack** KPI allows querying of kernel stack trace information and the automated generation of kernel stack trace strings for the purposes of debugging and tracing. **stack** relies on the presence of DDB(4), and all use of these functions must be made conditional on **DDB** being compiled in the kernel.

Each stack trace is described by a *struct stack*. Before a trace may be created or otherwise manipulated, storage for the trace must be allocated with **stack\_create**(), which may sleep. Memory associated with a trace may be freed by calling **stack\_destroy**().

A trace of the current kernel thread's call stack may be captured using **stack\_save**().

**stack\_print**() may be used to print a stack trace using the kernel [printf(9)](/printf/9.md).

**stack\_sbuf\_print**() may be used to construct a human-readable string, including conversion (where possible) from a simple kernel instruction pointer to a named symbol and offset. The argument *sb* must be an initialized struct sbuf as described in [sbuf(9)](/sbuf/9.md). This function may sleep if an auto-extending struct sbuf is used.

The utility functions **stack\_zero**, **stack\_copy**, and **stack\_put** may be used to manipulate stack data structures directly.

## SEE ALSO

DDB(4), [printf(9)](/printf/9.md), [sbuf(9)](/sbuf/9.md)

## AUTHORS

The [stack(9)](/stack/9.md) function suite was created by Antoine Brodin.

This manual page was written by Robert Watson.
