---
title: "debug.getstack"
description: "Reads a visible Lua frame's register slot or all slots."
---

```lua
debug.getstack(level: number, index: number? = -1): any
```

---

## Aliases

- `getstack`

---

## Arguments

<ParamField body="level" type="number" required>
  The stack-frame level to inspect. See this function's frame-numbering rules below.
</ParamField>

<ParamField body="index" type="number" default={"-1"}>
  A 1-based register slot, or -1 to return all frame slots.
</ParamField>

---

## Returns

<ResponseField name="slots" type="any">
  One register value, or all selected frame slots when index is -1 or omitted.
</ResponseField>

Also accepts debug.getstack(thread, level, index). Frame levels are zero-based in frame_at_level; registers are 1-based. -1/omitted index requests a table. Internal executor frames are skipped; C frames and invalid indexes raise.

**Related types:** [Debug types & behavior](/reference/debug/types).

---

## Example

```lua
local function inspect()
    local value = "docs-slot"
    local ok, slots = pcall(debug.getstack, 1)
    print(ok, slots, value)
end
inspect()
```
