| """ Adds the 'toggle-disassembly' command to switch you into a disassembly only mode """ |
| import lldb |
| |
| class DisassemblyMode: |
| def __init__(self, debugger, unused): |
| self.dbg = debugger |
| self.interp = debugger.GetCommandInterpreter() |
| self.store_state() |
| self.mode_off = True |
| |
| def store_state(self): |
| self.dis_count = self.get_string_value("stop-disassembly-count") |
| self.dis_display = self.get_string_value("stop-disassembly-display") |
| self.before_count = self.get_string_value("stop-line-count-before") |
| self.after_count = self.get_string_value("stop-line-count-after") |
| |
| def get_string_value(self, setting): |
| result = lldb.SBCommandReturnObject() |
| self.interp.HandleCommand("settings show " + setting, result) |
| value = result.GetOutput().split(" = ")[1].rstrip("\n") |
| return value |
| |
| def set_value(self, setting, value): |
| result = lldb.SBCommandReturnObject() |
| self.interp.HandleCommand("settings set " + setting + " " + value, result) |
| |
| def __call__(self, debugger, command, exe_ctx, result): |
| if self.mode_off: |
| self.mode_off = False |
| self.store_state() |
| self.set_value("stop-disassembly-display","always") |
| self.set_value("stop-disassembly-count", "8") |
| self.set_value("stop-line-count-before", "0") |
| self.set_value("stop-line-count-after", "0") |
| result.AppendMessage("Disassembly mode on.") |
| else: |
| self.mode_off = True |
| self.set_value("stop-disassembly-display",self.dis_display) |
| self.set_value("stop-disassembly-count", self.dis_count) |
| self.set_value("stop-line-count-before", self.before_count) |
| self.set_value("stop-line-count-after", self.after_count) |
| result.AppendMessage("Disassembly mode off.") |
| |
| def get_short_help(self): |
| return "Toggles between a disassembly only mode and normal source mode\n" |
| |
| def __lldb_init_module(debugger, unused): |
| debugger.HandleCommand("command script add -c disassembly_mode.DisassemblyMode toggle-disassembly") |