About the Debug Navigator

The debug navigator displays the call stacks of your paused app. With this navigator you can debug Swift or C-based code as well as OpenGL frames.

Selecting an item in the debug navigator causes information about the item to be displayed in the source editor and in the debug area.


Debugging C-based Code

When debugging C-based code, the navigator groups the stack frames by threads or queues, and lists the memory locations you’re interested in. Use the debug navigator to navigate the stack frames of your app’s threads, and to manage viewed memory locations for the current debugging session.

The debug navigator opens automatically whenever you pause your application (by choosing Debug > Pause), or it hits a breakpoint. (You can change that behavior in Alerts preferences.)


Threads indicate their running state with a status icon:

  • No icon means the thread is running normally.

  • A yellow status icon means that the thread is blocked and waiting on a lock or condition.

  • A red status icon means that you suspended the thread. A suspended thread does not execute code when you resume your application.

  • A gray icon means that thread or block is part of the recorded backtrace and is not currently executing

The debug navigator contains a process view selector, debug gauges, the thread and memory location list, and a filter bar.

With the debug gauges, you can see how your app is consuming cpu power, memory, and other attributes as it runs.

With the process view selector you indicate how the navigator displays threads:

  • By Thread: Displays threads as a flat list.

  • By Queue: Groups threads under the dispatch queue that created them.

With the filter bar you specify the threads and stack frames you want to see. The left button suppresses the display of stack frames without debug symbols. The middle button displays only crashed threads and threads with debug symbols. The right button suppresses the display of non-running blocks when the debug navigator is displaying queues. The thread filter allows you to show only threads or queues with names that match the filter text.

To remove a memory location from the list, select it and press Delete.

If you are debugging multiple processes from the same workspace, each process is listed separately in the debug navigator with its threads grouped underneath it. Multiple process debugging is a useful way to debug the interactions between client and server processes.


Debugging OpenGL Frames

When debugging an OpenGL frame, the debug navigator shows the OpenGL call trace that generated the captured frame. The call trace includes the stack frame for each OpenGL call.

The debug navigator contains the OpenGL call trace and a filter bar.

With the filter bar you specify the OpenGL calls and stack frames you want to see.

  • Call filter: Shows only markers and OpenGL draw calls.

  • Call stack slider: Shows stack frames, from only the most relevant to all of them.