@@ -49,8 +49,9 @@ class DiffDebug(App):
49
49
base_command_bar = Input (placeholder = "Enter your base command here..." , name = "base_command_bar" , id = "base-command-bar" )
50
50
regressed_command_bar = Input (placeholder = "Enter your regression command here..." , name = "regressed_command_bar" , id = "regressed-command-bar" )
51
51
52
- def __init__ (self , disable_asm = False , disable_registers = False ):
52
+ def __init__ (self , disable_asm = False , disable_registers = False , only_base = False ):
53
53
super ().__init__ ()
54
+ self .only_base = only_base
54
55
self .disable_asm = disable_asm
55
56
self .disable_registers = disable_registers
56
57
self .common_history = ["" ]
@@ -216,6 +217,33 @@ async def set_pregisters_command_result(self, state) -> None:
216
217
217
218
def compose (self ) -> ComposeResult :
218
219
"""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
+
219
247
with Vertical ():
220
248
yield Header ()
221
249
@@ -307,6 +335,9 @@ async def execute_debugger_command(self, event: Input.Changed) -> None:
307
335
self .parallel_command_bar .value = ""
308
336
309
337
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 )
310
341
if self .base_command_bar .value != "" :
311
342
result = Debugger .run_single_command (self .base_command_bar .value , "base" )
312
343
self .diff_area1 .append ([self .base_command_bar .value ])
@@ -348,6 +379,9 @@ async def execute_debugger_command(self, event: Input.Changed) -> None:
348
379
self .regressed_command_bar .value = ""
349
380
350
381
async def on_key (self , event : events .Key ) -> None :
382
+ if self .focused is None :
383
+ return
384
+
351
385
if self .focused .id == "parallel-command-bar" :
352
386
if event .key == "up" :
353
387
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:
383
417
Debugger = None
384
418
385
419
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
+
386
424
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 )
389
427
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 )
392
430
parser .add_argument ('-rs' ,'--regression-script-path' , help = 'Regression preliminary script file path' , default = None , nargs = '+' )
393
431
parser .add_argument ('-r' ,'--remote_host' , help = 'The host of the remote server' , default = 'localhost' )
394
432
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:
405
443
ra = ' ' .join (args ['regression_args' ])
406
444
rpid = args ['regression_processid' ]
407
445
rs = ' ' .join (args ['regression_script_path' ]) if args ["regression_script_path" ] is not None else None
446
+ base_only = False
408
447
409
448
if comparator == 'gdb' :
410
- from debuggers .gdb .gdb_mi_driver import GDBMiDebugger
449
+ from debuggers .gdb .gdb_mi_driver import GDBMiDebugger , IDDGdbController
411
450
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
422
454
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 )
427
456
428
457
elif comparator == 'lldb' :
429
- from debuggers .lldb .lldb_driver import LLDBParallelDebugger
458
+ from debuggers .lldb .lldb_driver import LLDBParallelDebugger , LLDBDebugger
430
459
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 )
434
465
else :
435
466
sys .exit ("Invalid comparator set" )
436
467
437
468
disable_registers = args ["disable_registers" ]
438
469
disable_assembly = args ["disable_assembly" ]
439
- dd = DiffDebug (disable_assembly , disable_registers )
470
+ dd = DiffDebug (disable_assembly , disable_registers , base_only )
440
471
dd .run ()
0 commit comments