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
                       "settings show" command:
                       
                   
(lldb) settings show thread-format 
                   
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'
                   
(lldb) settings show frame-format 
                   
frame-format (string) = 'frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n'
                   
                   When making thread formats, you will need surround any
                       of the information that comes from a stack frame with scopes ({ frame-content })
                       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:
                   
(lldb) thread backtrace 
                   
thread #1: tid = 0x2e03, stop reason = breakpoint 1.1 2.1
                   
  frame #0: 0x0000000100000e85 a.out`main + 4 at test.c:19
                   
  frame #1: 0x0000000100000e40 a.out`start + 52
                   
                   
                       
                   The frame related variables are:
                      
                      - ${file.*}
- ${frame.*}
- ${function.*}
- ${line.*}
- ${module.*}
Looking at the default format for the thread, and underlining
                        the frame information:
                    
'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'
                    
                    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.
                        
					
For both thread and frame formats, you can use ${target.script:python_func}, ${process.script:python_func} and ${thread.script:python_func}
						(and of course ${frame.script:python_func} for frame formats)
						In all cases, the signature of python_func is expected to be:
							
								def python_func(object,unused):
								    ...
								    return string
						
Where object is an instance of the SB class associated to the keyword you are using.
							
						
e.g. Assuming your function looks like
						def thread_printer_func (thread,unused):
						  return "Thread %s has %d frames\n" % (thread.name, thread.num_frames)
							
						And you set it up with 
(lldb) settings set thread-format "${thread.script:thread_printer_func}"
						* Thread main has 21 frames