**Traceview is deprecated.** If you're using Android
Studio 3.2 or later, you should instead use
[**CPU Profiler**](https://developer.android.com/studio/profile/cpu-profiler) to inspect
`.trace` files captured by
[instrumenting your app](https://developer.android.com/studio/profile/generate-trace-logs)
with the [`Debug`](https://developer.android.com/reference/android/os/Debug)
class, record new method traces, save `.trace` files, and inspect
real-time CPU usage of your app's processes.

Traceview is a tool that provides a graphical representations of
trace logs. You can generate the logs by instrumenting your code with the
[`Debug`](https://developer.android.com/reference/android/os/Debug) class. This method of tracing is
very precise because you can specify exactly where in the code you want to start
and stop logging trace data. If you haven't yet generated these trace logs and
saved them from your connected device to your local machine, go to [Generate
trace logs by instrumenting your app](https://developer.android.com/studio/profile/generate-trace-logs).
Inspecting these logs using Traceview helps you debug your app and
profile its performance.


**Tip:** You can [use
`dmtracedump`](https://developer.android.com/studio/command-line/dmtracedump) from the command-line to generate a graphical
call-stack diagrams of your trace log files.

If you don't need to view trace logs that you have recorded by instrumenting
your app with the [Debug](https://developer.android.com/reference/android/os/Debug)
class, you can [use the CPU profiler](https://developer.android.com/studio/profile/cpu-profiler)
included in Android Studio 3.0 and higher to inspect your app's threads and record
method traces.

## Open a trace log using Traceview

To open a trace log with Traceview from Android Studio, proceed as follows:

1. Start [Android Device Monitor](https://developer.android.com/studio/profile/monitor).
2. In the Android Device Monitor, select **File \> Open File**.
3. Navigate to the `.trace` file you want to inspect.
4. Click **Open**.

<br />

**Note:** If you are trying to view the trace logs
of an app that is built with code shrinking enabled (such as a release build),
some method and member names might be obfuscated. You can use the ProGuard
`mapping.txt` file to figure out the original unobfuscated names.
For more information on this file, see
[Decode an obfuscated
stack trace](https://developer.android.com/studio/build/shrink-code#decode-stack-trace).

**Note:** Running `traceview` from the
command line has been deprecated.

## Traceview overview

After opening a trace log, Traceview displays log data using the following two
panes:

- A [timeline pane](https://developer.android.com/studio/profile/traceview#timeline_pane) that describes when each thread enters and exits a method
- A [profile pane](https://developer.android.com/studio/profile/traceview#profile_pane) that summarizes the execution of each thread over the period of the trace log

The sections below provide addition information about the traceview output panes.

### Timeline pane

Figure 1 shows a close up of the timeline pane. Each thread's execution is
shown in its own row, with the elapsed time increasing towards the right.
Each method is shown in varying colors. The thin lines underneath the first
row show the children (from entry to exit) of the selected method.

![Traceview timeline pane](https://developer.android.com/static/studio/images/profile/traceview_timeline_pane.png)

**Figure 1.**
The Traceview timeline pane.

<br />

### Profile pane

As shown in figure 2, the profile pane provides a list of each method the system
executed over the period of the trace log and the time spent executing those
methods. A method that calls another method is referred to as the *parent* , and
methods that a parent calls are referred to as its *children*. When you
select a method by clicking on it, it displays both its parents and its children
under two separate nodes.

For each method (top-level node), the table shows both its inclusive and
exclusive times (in milliseconds) as well as the percentage of the total time.
*Exclusive time* is the time spent executing the method's own code, while
*inclusive time* is the time spent executing the method's own code plus the time
spent executing its children. Timing information is also reported in terms of
CPU time and real time. *CPU time* considers only the time that the thread is
actively using CPU time, and *real time* provides absolute timing information
from the moment your app enters a method to when it exits that method---regardless
of whether the thread is active or sleeping.

For each top-level node in the profile pane, the **Calls + Rec, Calls/Total**
column in the table (not shown in figure 2) reports the number of calls to the
method and the number of recursive calls. Or, for parent and child methods, this
column shows the number of calls in which the method was a child or parent of
the method in the top-level node.

![Traceview profile pane.](https://developer.android.com/static/studio/images/profile/traceview_profile_pane.png)

**Figure 2.** The Traceview profile pane.

<br />

## Traceview known issues

Traceview logging does not handle threads well, resulting in the following
issues:

- If a thread exits during profiling, the thread name is not emitted (fixed in Android 5.1 and later);
- The VM reuses thread IDs. If a thread stops and another starts, they may get the same ID.