# Is there a way to get a debug writer?

**URL:** <https://ziggit.dev/t/is-there-a-way-to-get-a-debug-writer/18140>\
**Category:** Help\
**Tags:** standard-library\
**Created:** [October 29, 2026, 11:31am UTC](https://ziggit.dev/t/is-there-a-way-to-get-a-debug-writer/18140 "2026-10-29T11:31:21Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Solarflurry](https://ziggit.dev/user_avatar/ziggit.dev/solarflurry/32/10229_2.png) [@Solarflurry](https://ziggit.dev/u/Solarflurry)\
**Post date:** [October 29, 2026, 11:31am UTC](https://ziggit.dev/t/is-there-a-way-to-get-a-debug-writer/18140/1 "2026-10-29T11:31:21Z")

</div>

Is there a way to get a debug writer, similar to what std.debug.print does, but more generically as an entire writer? This is just to print information when I don’t have access to a writer. Something like this:

```zig
printSomeStuff(some_stuff, std.debug.writer)

```

or a similar pattern?

---

<div class="post-metadata">

**Author:** ![spiffyk](https://ziggit.dev/user_avatar/ziggit.dev/spiffyk/32/7202_2.png) [@spiffyk](https://ziggit.dev/u/spiffyk)\
**Post date:** [October 29, 2026, 11:37am UTC](https://ziggit.dev/t/is-there-a-way-to-get-a-debug-writer/18140/2 "2026-10-29T11:37:28Z")

</div>

~~You probably want a writer to `stderr`?~~

```zig
var buf: [4096]u8 = undefined;
var stderr_file_writer = std.io.File.stderr().writer(io, &buf);
const stderr_wr = &stderr_file_writer.interface; // don't forget the &

```

Edit: What @hemisputnik below says is better.

---

<div class="post-metadata">

**Author:** ![hemisputnik](https://ziggit.dev/user_avatar/ziggit.dev/hemisputnik/32/9625_2.png) [@hemisputnik](https://ziggit.dev/u/hemisputnik)\
**Post date:** [October 29, 2026, 11:51am UTC](https://ziggit.dev/t/is-there-a-way-to-get-a-debug-writer/18140/3 "2026-10-29T11:51:35Z")

</div>

Use `std.debug.lockStderr` to acquire `stderr` for writing, then use `std.debug.unlockStderr` to unlock it - this is what `std.debug.print` and the like use to write to `stderr`.

```zig
var stderr_buf: [64]u8 = undefined;
const locked_stderr = std.debug.lockStderr(&stderr_buf);
defer std.debug.unlockStderr();

```

Then either use `locked_stderr.file_writer.interface`,

```zig
locked_stderr.file_writer.interface.print("hello, {s}\n", .{"Ziggit"}) catch {};

```

or acquire a `Io.Terminal`, for more goodies such as access to text colour.

```zig
const terminal = locked_stderr.terminal();

terminal.setColor(.bright_black) catch {};
terminal.writer.print("hello, {s}\n", .{"Ziggit"}) catch {};
terminal.setColor(.reset) catch {};

```

`std.debug.unlockStderr` will call `flush` on the writer for you.
