<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Jim,</div><div><br></div><div>an easy way to have commands run synchronous would be to change ScriptInterpreterPython::RunScriptBasedCommand() to run "debugger.SetAsync(False)" before actually invoking the target function, and "debugger.SetAsync(True)" immediately after.</div><div><br></div><div>Of course, one could add a --asynchronous flag to "command script add" and have all commands added *without* this flag run synchronous through the above trick.</div><div>If you want, I can try to work on this in the coming days and let you have a patch for this.</div><div><br></div><div><div>Otherwise, if the preferred idea is to leave it to the individual scripted commands to pick their synchronicity, I guess it is safer to have the code in a try-finally block, as in:</div><div><br></div><div><blockquote type="cite"><div>def StepOver(debugger, args, result, dict):<br><span class="Apple-tab-span" style="white-space: pre; ">   </span>arg_split = args.split(" ")<br><span class="Apple-tab-span" style="white-space: pre; ">  </span>print type(arg_split)<br><span class="Apple-tab-span" style="white-space: pre; ">  </span>count = int(arg_split[0])<br></div></blockquote><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">    </span>try:</div></blockquote><blockquote type="cite"><div>   <span class="Apple-tab-span" style="white-space: pre; ">      </span>    debugger.SetAsync(False)</div></blockquote><blockquote type="cite"><div>        <span class="Apple-tab-span" style="white-space: pre; ">      </span>for i in range(0,count):<br><span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space: pre; "> </span>    lldb.thread.StepOver(lldb.eOnlyThisThread)<br><span class="Apple-tab-span" style="white-space: pre; ">  </span><span class="Apple-tab-span" style="white-space: pre; "> </span>    debugger.HandleCommand("fr var")<br><span class="Apple-tab-span" style="white-space: pre; ">  </span><span class="Apple-tab-span" style="white-space: pre; "> </span>    print "step<%d>"%i<br><span class="Apple-tab-span" style="white-space: pre; ">  </span>finally:</div></blockquote><div><blockquote type="cite"></blockquote></div><blockquote type="cite"><div>   <span class="Apple-tab-span" style="white-space: pre; ">        </span>    debugger.SetAsync (True)</div></blockquote></div></div><div><div><br></div></div><div><br></div>Sincerely,<br><div apple-content-edited="true">
<div>-<span class="Apple-converted-space"> </span><i>Enrico Granata</i></div>
</div>
<br><div><div>On Nov 4, 2011, at 6:18 PM, Jim Ingham wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>gdbrulez:lldb-clean/build/Debug > cat ~/Desktop/script.py<br>#########################<br>import lldb<br>import sys<br>import os<br>import time<br><br>def StepOver(debugger, args, result, dict):<br><span class="Apple-tab-span" style="white-space:pre">      </span>arg_split = args.split(" ")<br><span class="Apple-tab-span" style="white-space:pre">     </span>print type(arg_split)<br><span class="Apple-tab-span" style="white-space:pre">     </span>count = int(arg_split[0])<br>        debugger.SetAsync(False)<br><span class="Apple-tab-span" style="white-space:pre">    </span>for i in range(0,count):<br><span class="Apple-tab-span" style="white-space:pre">  </span><span class="Apple-tab-span" style="white-space:pre">    </span>lldb.thread.StepOver(lldb.eOnlyThisThread)<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>debugger.HandleCommand("fr var")<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">    </span>print "step<%d>"%i<br><br>        debugger.SetAsync (True)<br><br>def __lldb_init_module(debugger, session_dict):<br><span class="Apple-tab-span" style="white-space:pre">      </span>debugger.HandleCommand("command script add -f script.StepOver mysto")<br><span class="Apple-tab-span" style="white-space:pre">   </span>return None<br><br>Be sure to set the debugger back to Async mode in the script when you're done.  My guess is that the most useful way to run lldb "script" commands is to set them to synchronous mode by default.  Or maybe this should be a flag on the "command script add"?<br><br>Hope this helps,<br><br>Jim</div></blockquote></div></body></html>