@@ -49,8 +49,9 @@ class DiffDebug(App):
4949 base_command_bar = Input (placeholder = "Enter your base command here..." , name = "base_command_bar" , id = "base-command-bar" )
5050 regressed_command_bar = Input (placeholder = "Enter your regression command here..." , name = "regressed_command_bar" , id = "regressed-command-bar" )
5151
52- def __init__ (self , disable_asm = False , disable_registers = False ):
52+ def __init__ (self , disable_asm = False , disable_registers = False , only_base = False ):
5353 super ().__init__ ()
54+ self .only_base = only_base
5455 self .disable_asm = disable_asm
5556 self .disable_registers = disable_registers
5657 self .common_history = ["" ]
@@ -216,6 +217,33 @@ async def set_pregisters_command_result(self, state) -> None:
216217
217218 def compose (self ) -> ComposeResult :
218219 """Compose the layout of the application."""
220+ if self .only_base :
221+ with Vertical ():
222+ yield Header ()
223+ with Horizontal (classes = "base_only_row1" ):
224+ yield self .diff_frames1
225+ with Horizontal (classes = "base_only_row2" ):
226+ with Horizontal ():
227+ yield self .diff_locals1
228+ yield self .diff_args1
229+ if not self .disable_registers and not self .disable_asm :
230+ with Vertical ():
231+ with Horizontal ():
232+ yield self .diff_reg1
233+ with Horizontal ():
234+ yield self .diff_asm1
235+ elif not self .disable_asm :
236+ with Vertical ():
237+ yield self .diff_asm1
238+ elif not self .disable_registers :
239+ with Vertical ():
240+ yield self .diff_reg1
241+ with Horizontal (classes = "base_only_row3" ):
242+ yield self .diff_area1
243+ with Horizontal (classes = "base_only_row4" ):
244+ yield self .base_command_bar
245+ return
246+
219247 with Vertical ():
220248 yield Header ()
221249
@@ -307,6 +335,9 @@ async def execute_debugger_command(self, event: Input.Changed) -> None:
307335 self .parallel_command_bar .value = ""
308336
309337 elif event .control .id == 'base-command-bar' :
338+ if self .only_base and (self .base_command_bar .value == "exit" or self .base_command_bar .value == "quit" ):
339+ Debugger .terminate ()
340+ exit (0 )
310341 if self .base_command_bar .value != "" :
311342 result = Debugger .run_single_command (self .base_command_bar .value , "base" )
312343 self .diff_area1 .append ([self .base_command_bar .value ])
@@ -348,6 +379,9 @@ async def execute_debugger_command(self, event: Input.Changed) -> None:
348379 self .regressed_command_bar .value = ""
349380
350381 async def on_key (self , event : events .Key ) -> None :
382+ if self .focused is None :
383+ return
384+
351385 if self .focused .id == "parallel-command-bar" :
352386 if event .key == "up" :
353387 self .common_history_index = (self .common_history_index - 1 ) % len (self .common_history )
@@ -383,12 +417,16 @@ async def on_key(self, event: events.Key) -> None:
383417 Debugger = None
384418
385419 parser = argparse .ArgumentParser (description = 'Diff Debug for simple debugging!' )
420+
421+ base_arg_group = parser .add_mutually_exclusive_group ()
422+ regressed_arg_group = parser .add_mutually_exclusive_group ()
423+
386424 parser .add_argument ('-c' ,'--comparator' , help = 'Choose a comparator' , default = 'gdb' )
387- parser .add_argument ('-ba' ,'--base-args' , help = 'Base executable args' , default = "" , nargs = '+' )
388- parser .add_argument ('-bpid' ,'--base-processid' , help = 'Base process ID' , default = None )
425+ base_arg_group .add_argument ('-ba' ,'--base-args' , help = 'Base executable args' , default = "" , nargs = '+' )
426+ base_arg_group .add_argument ('-bpid' ,'--base-processid' , help = 'Base process ID' , default = None )
389427 parser .add_argument ('-bs' ,'--base-script-path' , help = 'Base preliminary script file path' , default = None , nargs = '+' )
390- parser .add_argument ('-ra' ,'--regression-args' , help = 'Regression executable args' , default = "" , nargs = '+' )
391- parser .add_argument ('-rpid' ,'--regression-processid' , help = 'Regression process ID' , default = None )
428+ regressed_arg_group .add_argument ('-ra' ,'--regression-args' , help = 'Regression executable args' , default = "" , nargs = '+' )
429+ regressed_arg_group .add_argument ('-rpid' ,'--regression-processid' , help = 'Regression process ID' , default = None )
392430 parser .add_argument ('-rs' ,'--regression-script-path' , help = 'Regression preliminary script file path' , default = None , nargs = '+' )
393431 parser .add_argument ('-r' ,'--remote_host' , help = 'The host of the remote server' , default = 'localhost' )
394432 parser .add_argument ('-p' ,'--platform' , help = 'The platform of the remote server: macosx, linux' , default = 'linux' )
@@ -405,36 +443,29 @@ async def on_key(self, event: events.Key) -> None:
405443 ra = ' ' .join (args ['regression_args' ])
406444 rpid = args ['regression_processid' ]
407445 rs = ' ' .join (args ['regression_script_path' ]) if args ["regression_script_path" ] is not None else None
446+ base_only = False
408447
409448 if comparator == 'gdb' :
410- from debuggers .gdb .gdb_mi_driver import GDBMiDebugger
449+ from debuggers .gdb .gdb_mi_driver import GDBMiDebugger , IDDGdbController
411450
412- if ba != "" and bpid is not None :
413- raise Exception ("Both executable and process ID given for base. This is not possible" )
414- if ra != "" and rpid is not None :
415- raise Exception ("Both executable and process ID given for regression. This is not possible" )
416-
417- if ba == "" :
418- if ra == "" :
419- Debugger = GDBMiDebugger (ba , bs , ra , rs , base_pid = bpid , regression_pid = rpid )
420- else :
421- Debugger = GDBMiDebugger (ba , bs , ra , rs , base_pid = bpid )
451+ if ra == "" and rpid is None :
452+ Debugger = IDDGdbController (ba , bpid , bs )
453+ base_only = True
422454 else :
423- if ra == "" :
424- Debugger = GDBMiDebugger (ba , bs , ra , rs , regression_pid = rpid )
425- else :
426- Debugger = GDBMiDebugger (ba , bs , ra , rs )
455+ Debugger = GDBMiDebugger (ba , bs , ra , rs , base_pid = bpid , regression_pid = rpid )
427456
428457 elif comparator == 'lldb' :
429- from debuggers .lldb .lldb_driver import LLDBParallelDebugger
458+ from debuggers .lldb .lldb_driver import LLDBParallelDebugger , LLDBDebugger
430459
431- if ba == "" or ra == "" :
432- raise Exception ("LLDB can only be used by launching executable and executable is not provided" )
433- Debugger = LLDBParallelDebugger (ba , ra )
460+ if ra == "" and rpid is None :
461+ Debugger = LLDBDebugger (ba , bpid )
462+ base_only = True
463+ else :
464+ Debugger = LLDBParallelDebugger (ba , bpid , ra , rpid )
434465 else :
435466 sys .exit ("Invalid comparator set" )
436467
437468 disable_registers = args ["disable_registers" ]
438469 disable_assembly = args ["disable_assembly" ]
439- dd = DiffDebug (disable_assembly , disable_registers )
470+ dd = DiffDebug (disable_assembly , disable_registers , base_only )
440471 dd .run ()
0 commit comments