<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>LLDB Stack and Frame Formats</title>
</head>

<body>
    <div class="www_title">
      The <strong>LLDB</strong> Debugger
    </div>
    
<div id="container">
	<div id="content">
       <!--#include virtual="sidebar.incl"-->

		<div id="middle">
			<div class="post">
				<h1 class ="postheader">Stack Frame and Thread Format</h1>
				<div class="postcontent">
				   <p>LLDB was recently modified to allow users to define the 
				       format of the information that generates the descriptions
				       for threads and stack frames. Typically when your program stops
				       at a breakpoint you will get a line that describes why
				       your thread stopped:</p>

    			   <p><b><code>* thread #1: tid = 0x2e03, 0x0000000100000e85 a.out`main + 4, stop reason = breakpoint 1.1</code></b></p>

        		   <p>Stack backtraces frames also have a similar information line:</p>

                   <p><code><b>(lldb)</b> thread backtrace
                   <br><b>thread #1: tid = 0x2e03, stop reason = breakpoint 1.1
                   <br>&nbsp;&nbsp;frame #0: 0x0000000100000e85 a.out`main + 4 at test.c:19
                   <br>&nbsp;&nbsp;frame #1: 0x0000000100000e40 a.out`start + 52
                   </code></b></p>

				   <p>The two format strings can currently be set using the <b>settings set</b> command:</p>
				   <p><code><b>(lldb)</b> settings set frame-format STRING
				   <br><b>(lldb)</b> settings set thread-format STRING
				   </p></code>

                   </div>
       			<div class="postfooter"></div>
   			</div>

   			<div class="post">
   				<h1 class ="postheader">Format Strings</h1>
   				<div class="postcontent">

                   <p>So what is the format of the format strings? Format strings can
                   contain plain text, control characters and variables that have access
                   to the current program state.</p>
                   
                   <p>Normal characters are any text that doesn't contain a <code><b>'{'</b></code>, <code><b>'}'</b></code>, <code><b>'$'</b></code>,
                       or <code><b>'\'</b></code> character.</p>
                
                   <p>Variable names are found in between a <code><b>"${"</b></code> prefix, and
                   end with a <code><b>"}"</b></code> suffix. In other words, a variable looks like
                   <code>"<b>${frame.pc}</b>"</code>.</p> 
                   
                </div>
          		<div class="postfooter"></div>
      			</div>

      			<div class="post">
      				<h1 class ="postheader">Variables</h1>
      				<div class="postcontent">

                   <p>A complete list of currently supported format string variables is listed below:</p>

                   <table border="1">
                    <tr valign=top><td><b>Variable Name</b></td><td><b>Description</b></td></tr>
                    <tr valign=top><td><b>file.basename</b></td><td>The current compile unit file basename for the current frame.</td></tr>
                    <tr valign=top><td><b>file.fullpath</b></td><td>The current compile unit file fullpath for the current frame.</td></tr>
                    <tr valign=top><td><b>frame.index</b></td><td>The frame index (0, 1, 2, 3...)</td></tr>
                    <tr valign=top><td><b>frame.pc</b></td><td>The generic frame register for the program counter.</td></tr>
                    <tr valign=top><td><b>frame.sp</b></td><td>The generic frame register for the stack pointer.</td></tr>
                    <tr valign=top><td><b>frame.fp</b></td><td>The generic frame register for the frame pointer.</td></tr>
                    <tr valign=top><td><b>frame.flags</b></td><td>The generic frame register for the flags register.</td></tr>
                    <tr valign=top><td><b>frame.reg.NAME</b></td><td>Access to any platform specific register by name (replace <b>NAME</b> with the name of the desired register).</td></tr>
                    <tr valign=top><td><b>function.name</b></td><td>The name of the current function or symbol.</td></tr>
                    <tr valign=top><td><b>function.name-with-args</b></td><td>The name of the current function with arguments and values or the symbol name.</td></tr>
                    <tr valign=top><td><b>function.pc-offset</b></td><td>The program counter offset within the current function or symbol</td></tr>
                    <tr valign=top><td><b>line.file.basename</b></td><td>The line table entry basename to the file for the current line entry in the current frame.</td></tr>
                    <tr valign=top><td><b>line.file.fullpath</b></td><td>The line table entry fullpath to the file for the current line entry in the current frame.</td></tr>
                    <tr valign=top><td><b>line.number</b></td><td>The line table entry line number for the current line entry in the current frame.</td></tr>
                    <tr valign=top><td><b>line.start-addr</b></td><td>The line table entry start address for the current line entry in the current frame.</td></tr>
                    <tr valign=top><td><b>line.end-addr</b></td><td>The line table entry end address for the current line entry in the current frame.</td></tr>
                    <tr valign=top><td><b>module.file.basename</b></td><td>The basename of the current module (shared library or executable)</td></tr>
                    <tr valign=top><td><b>module.file.fullpath</b></td><td>The basename of the current module (shared library or executable)</td></tr>
                    <tr valign=top><td><b>process.file.basename</b></td><td>The basename of the file for the process</td></tr>
                    <tr valign=top><td><b>process.file.fullpath</b></td><td>The fullname of the file for the process</td></tr>
                    <tr valign=top><td><b>process.id</b></td><td>The process ID native the the system on which the inferior runs.</td></tr>
                    <tr valign=top><td><b>process.name</b></td><td>The name of the process at runtime</td></tr>
                    <tr valign=top><td><b>thread.id</b></td><td>The thread identifier for the current thread</td></tr>
                    <tr valign=top><td><b>thread.index</b></td><td>The unique one based thread index ID which is guaranteed to be unique as threads come and go.</td></tr>
                    <tr valign=top><td><b>thread.name</b></td><td>The name of the thread if the target OS supports naming threads</td></tr>
                    <tr valign=top><td><b>thread.queue</b></td><td>The queue name of the thread if the target OS supports dispatch queues</td></tr>
                    <tr valign=top><td><b>thread.stop-reason</b></td><td>A textual reason each thread stopped</td></tr>
                    <tr valign=top><td><b>thread.return-value</b></td><td>The return value of the latest step operation (currently only for step-out.)</td></tr>
                    <tr valign=top><td><b>target.arch</b></td><td>The architecture of the current target</td></tr>
                    </table>
                    
                       </div>
           			<div class="postfooter"></div>
       			</div>

       			<div class="post">
       				<h1 class ="postheader">Control Characters</h1>
       				<div class="postcontent">

                    <p>Control characters include <b><code>'{'</code></b>,
                    <b><code>'}'</code></b>, and <b><code>'\'</code></b>.</p>

                    <p>The '{' and '}' are used for scoping blocks, and the '\' character
                        allows you to desensitize control characters and also emit non-printable
                        characters.
    
                           </div>
               			<div class="postfooter"></div>
           			</div>

           			<div class="post">
           				<h1 class ="postheader">Desensitizing Characters in the format string</h1>
           				<div class="postcontent">
                    <p>The backslash control character allows your to enter the typical
                    <b><code>"\a"</code></b>, <b><code>"\b"</code></b>, <b><code>"\f"</code></b>, <b><code>"\n"</code></b>, 
                        <b><code>"\r"</code></b>, <b><code>"\t"</code></b>, <b><code>"\v"</code></b>, <b><code>"\\"</code></b>, characters 
                    and along with the standard octal representation <b><code>"\0123"</code></b>
                    and hex <b><code>"\xAB"</code></b> characters. This allows you to enter 
                    escape characters into your format strings and will
                    allow colorized output for terminals that support color.

                       </div>
           			<div class="postfooter"></div>
       			</div>

       			<div class="post">
       				<h1 class ="postheader">Scoping</h1>
       				<div class="postcontent">
                   <p>Many times the information that you might have in your prompt might not be
                   available and you won't want it to print out if it isn't valid. To take care
                   of this you can enclose everything that <b>must</b> resolve into a scope. A scope
                   is starts with <code><b>'{'</code></b> and ends with 
                   <code><b>'}'</code></b>. For example in order to only display
                   the current frame line table entry basename and line number when the information
                   is available for the current frame:

                   <p><b><code>"{ at {$line.file.basename}:${line.number}}"</code></b></p>

                   <p>Broken down this is:
                       <ul>
                        <li>The start the scope <p><b><code>"{"</code></b></p></li>
                        <li> format whose content will only be displayed if all information is available:
                           <p><b><code>"at {$line.file.basename}:${line.number}"</code></b></p></li>
                        <li>end the scope: <p><b><code>"}"</code></b></p></li>
                        </ul>

                    </div>
               	    <div class="postfooter"></div>
           		</div>

           		<div class="post">
           			<h1 class ="postheader">Making the Frame Format</h1>
           			<div class="postcontent">
                   <p>The information that we see when stopped in a frame:

                   <p><b><code>frame #0: 0x0000000100000e85 a.out`main + 4 at test.c:19</code></b></p>

                   <p>can be displayed with the following format:</p>

                   <p><b><code>"frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n"</code></b></p>

                   <p>This breaks down to:
                       
                    <ul>
                        <li>Always print the frame index and frame PC:

                            <p><b><code>"frame #${frame.index}: ${frame.pc}"</code></b></p>

                   <li>only print the module followed by a tick if there is a valid
                   module for the current frame:

                   <p><b><code>"{ ${module.file.basename}`}"</code></b></p>

                   <li>print the function name with optional offset:</p>
                       <p><b><code>"{${function.name}{${function.pc-offset}}}"</code></b></p>

                   <li>print the line info if it is available:</p>

                       <p><b><code>"{ at ${line.file.basename}:${line.number}}"</code></b></p>

                   <li>then finish off with a newline:</p>

                    <p><b><code>"\n"</code></b></p>
                    </ul>

                    </div>
               	    <div class="postfooter"></div>
           		</div>

           		<div class="post">
           			<h1 class ="postheader">Making Your Own Formats</h1>
           			<div class="postcontent">

                   <p>When modifying your own format strings, it is useful
                       to start with the default values for the frame and
                       thread format strings. These can be accessed with the
                       <b><code>"settings show"</code></b> command:
                       
                   <p><b><code>(lldb)</b> settings show thread-format 
                   <br>thread-format (string) = 'thread #${thread.index}: tid = ${thread.id}{, ${frame.pc}}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{, stop reason = ${thread.stop-reason}}{, name = ${thread.name}}{, queue = ${thread.queue}}\n'
                   <br><b>(lldb)</b> settings show frame-format 
                   <br>frame-format (string) = 'frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n'
                   </code></p>


                   <p>When making thread formats, you will need surround any
                       of the information that comes from a stack frame with scopes (<b>{</b> <i>frame-content</i> <b>}</b>)
                       as the thread format doesn't always want to show frame information.
                       When displaying the backtrace for a thread, we don't need to duplicate
                       the information for frame zero in the thread information:

                   <p><code><b>(lldb)</b> thread backtrace 
                   <br>thread #1: tid = 0x2e03, stop reason = breakpoint 1.1 2.1
                   <br>&nbsp;&nbsp;frame #0: 0x0000000100000e85 a.out`main + 4 at test.c:19
                   <br>&nbsp;&nbsp;frame #1: 0x0000000100000e40 a.out`start + 52
                   </code>
                   </p>
                       
                   <p>The frame related variables are:
                      <ul>
                      <li><code><b>${file.*}</b></code></li>
                      <li><code><b>${frame.*}</b></code></li>
                      <li><code><b>${function.*}</b></code></li>
                      <li><code><b>${line.*}</b></code></li>
                      <li><code><b>${module.*}</b></code></li>
                      </ul>
                    </p>
                     
                    <p>Looking at the default format for the thread, and underlining
                        the frame information:
                    <p><code>'thread #${thread.index}: tid = ${thread.id}<u><b>{</b>, ${frame.pc}<b>}{</b> ${module.file.basename}`${function.name}{${function.pc-offset}}<b>}</b></u>{, stop reason = ${thread.stop-reason}}{, name = ${thread.name}}{, queue = ${thread.queue}}\n'
                    </code></p>
                    <p>We can see that all frame information is contained in scopes so 
                        that when the thread information is displayed in a context where
                        we only want to show thread information, we can do so.
                        
				</div>
				<div class="postfooter"></div>
		    </div>

		</div>
	</div>
</div>
</body>
</html>
