Hello! Thanks for creating this neat extension to use for Assembly debugging. I'm not certain if this should be considered a bug with dashmips or with this Visual Studio Code extension. Essentially, the issue appears to be that when I set a breakpoint as the last line of assembly code and then give the "Step Over" command, the following index out of bounds error occurs. I'm not sure what exactly you are sending to dashmips when the step over command is sent, but it would appear that dashmips runs out of commands in the array of stored commands.
If I hit "continue" instead of "step over", the program does not error out and instead says:
2021-09-13 15:33:05,532 INFO Recv `{'method': 'continue', 'params': [{'id': 0, 'path': 'd:\\Documents\\Assembly-MIPS\\Hello-World.asm', 'line': 18}]}`
Program counter invalid on (dropped off bottom)
I think the solution on your end is to check what line you are currently debugging, and if it's the last line, change the way you handle the final continue / step over command. If its not something you have the capacity to fix, I can bring up this issue with the dashmips repo instead.
.data
msg: .asciiz "\nHello, World!\n"
.text
main:
li $v0, 4 # $v0 = 4
la $a0, msg # $a0 = msg
syscall
addi $t0, $zero, 12
addi $t1, $zero, 7
add $s0, $t0, $t1
sub $s1, $t0, $t1
addi $s2, $zero, 0x10010000
sw $s0, 0($s2)
sw $s1, 4($s2)
PS D:\Documents\Assembly-MIPS> & 'python' '-m' 'dashmips' 'debug' '-i' 'localhost' '-p' '2390' '-l' 'd:\Documents\Assembly-MIPS\Hello-World.asm'
2021-09-13 15:21:02,835 INFO Serving on: tcp://localhost:2390
2021-09-13 15:21:02,935 INFO 127.0.0.1 wrote: {'method': 'verify_breakpoints', 'params': [{'id': 0, 'path': 'd:\\Documents\\Assembly-MIPS\\Hello-World.asm',
'line': 18}]}
2021-09-13 15:21:02,936 INFO Recv `{'method': 'verify_breakpoints', 'params': [{'id': 0, 'path': 'd:\\Documents\\Assembly-MIPS\\Hello-World.asm', 'line': 18}]}`
2021-09-13 15:21:02,936 INFO Send `{"method": "verify_breakpoints", "result": [[{"id": 0, "path": "d:\\Documents\\Assembly-MIPS\\Hello-World.asm", "line": 18}], [9]]}`
2021-09-13 15:21:02,937 INFO 127.0.0.1 wrote: {'method': 'start', 'params': []}
2021-09-13 15:21:02,938 INFO Recv `{'method': 'start', 'params': []}`
2021-09-13 15:21:02,938 INFO Send `{"method": "start", "result": {"pid": 6576}}`
2021-09-13 15:21:02,938 INFO 127.0.0.1 wrote: {'method': 'continue', 'params': [{'id': 0, 'path': 'd:\\Documents\\Assembly-MIPS\\Hello-World.asm', 'line': 18}]}
2021-09-13 15:21:02,939 INFO Recv `{'method': 'continue', 'params': [{'id': 0, 'path': 'd:\\Documents\\Assembly-MIPS\\Hello-World.asm', 'line': 18}]}`
Hello, World!
2021-09-13 15:21:02,946 INFO Send `{"method": "continue", "result": {"stopped": true, "line": {"filename": "d:\\Documents\\Assembly-MIPS\\Hello-World.asm", "lineno": 18, "line": "sw $s1, 4($s2)"}}}`
2021-09-13 15:21:02,947 INFO 127.0.0.1 wrote: {'method': 'update_visualizer', 'params': ['']}
2021-09-13 15:21:02,948 INFO Recv `{'method': 'update_visualizer', 'params': ['']}`
2021-09-13 15:21:02,948 INFO Send `{"method": "update_visualizer", "result": "&&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& &&&& "}`
2021-09-13 15:21:02,961 INFO 127.0.0.1 wrote: {'method': 'info', 'params': []}
2021-09-13 15:21:02,961 INFO Recv `{'method': 'info', 'params': []}`
2021-09-13 15:21:02,972 INFO Send info response
2021-09-13 15:21:03,414 INFO 127.0.0.1 wrote: {'method': 'info', 'params': []}
2021-09-13 15:21:03,414 INFO Recv `{'method': 'info', 'params': []}`
2021-09-13 15:21:03,424 INFO Send info response
2021-09-13 15:21:15,171 INFO 127.0.0.1 wrote: {'method': 'step', 'params': []}
2021-09-13 15:21:15,172 INFO Recv `{'method': 'step', 'params': []}`
----------------------------------------
Exception occurred during processing of request from ('127.0.0.1', 56807)
Traceback (most recent call last):
File "C:\Program Files\Python39\lib\socketserver.py", line 316, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Program Files\Python39\lib\socketserver.py", line 347, in process_request
self.finish_request(request, client_address)
File "C:\Program Files\Python39\lib\socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Program Files\Python39\lib\socketserver.py", line 720, in __init__
self.handle()
File "C:\Users\noahk\AppData\Roaming\Python\Python39\site-packages\dashmips\debuggerserver.py", line 132, in handle
response = run_method(command, self.commands)
File "C:\Users\noahk\AppData\Roaming\Python\Python39\site-packages\dashmips\debuggerserver.py", line 81, in run_method
result = command(params=params)
File "C:\Users\noahk\AppData\Roaming\Python\Python39\site-packages\dashmips\debugger.py", line 37, in debug_step
return {"stopped": True, "line": asdict(program.current_line)}
File "C:\Users\noahk\AppData\Roaming\Python\Python39\site-packages\dashmips\models.py", line 69, in current_line
return self.source[pc]
IndexError: list index out of range
----------------------------------------
Environment:
Python v3.9.0
dashmips v0.1.10 (latest)
dashmips-debugger v0.1.14 (latest)
Explanation
Hello! Thanks for creating this neat extension to use for Assembly debugging. I'm not certain if this should be considered a bug with dashmips or with this Visual Studio Code extension. Essentially, the issue appears to be that when I set a breakpoint as the last line of assembly code and then give the "Step Over" command, the following index out of bounds error occurs. I'm not sure what exactly you are sending to dashmips when the step over command is sent, but it would appear that dashmips runs out of commands in the array of stored commands.
If I hit "continue" instead of "step over", the program does not error out and instead says:
I think the solution on your end is to check what line you are currently debugging, and if it's the last line, change the way you handle the final continue / step over command. If its not something you have the capacity to fix, I can bring up this issue with the dashmips repo instead.
Code
Images
Log