Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enable gdb reverse debugging #2130

Open
jfg118 opened this issue Jun 14, 2018 · 12 comments · May be fixed by microsoft/MIEngine#1037
Open

enable gdb reverse debugging #2130

jfg118 opened this issue Jun 14, 2018 · 12 comments · May be fixed by microsoft/MIEngine#1037
Labels
debugger Feature Request help wanted Can be fixed in the public (open source) repo.

Comments

@jfg118
Copy link

jfg118 commented Jun 14, 2018

Type: Debugger

Hookup the reverse debugging commands for gdb to the VSCode Debugger Protocol.

i.e. reverse-next, reverse-step, reverse-continue, etc.

@WardenGnaw
Copy link
Member

You will want to make a request to the VSCode Protocol at their GitHub issue page at https://github.com/Microsoft/vscode-debugadapter-node/issues

@pieandcakes
Copy link
Contributor

pieandcakes commented Jun 14, 2018

@jfg118 Does gdb provide mi support for these features? As @WardenGnaw mentioned above, they will need to be implemented and supported by VS Code in their debug protocol before we can add that functionality.

@jfg118
Copy link
Author

jfg118 commented Jun 15, 2018

@WardenGnaw the VSCode Protocol supports the "Back" functionality.

https://github.com/Microsoft/vscode-debugadapter-node/blob/master/protocol/src/debugProtocol.ts

i.e. StepBack, ReverseContinue, etc. The capabilities need to specify supportsStepBack := true

@pieandcakes gdb-mi it supports the reverse commands through specify -reverse argument to the normal step , next, commands, as well as setting the debug direction.

https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI-Program-Execution.html#GDB_002fMI-Program-Execution

@WardenGnaw
Copy link
Member

During the start of GDB/LLDB. This will also need to run -list-target-features and validate that ‘reverse’ is in the result list.

In order to run the commands, users will need to run -exec console "target record-full" from the debug console in order for the commands to work. Enabling this at the start will be slow for larger programs, and if users do want this they can insert it into the setupCommand section.

@pieandcakes
Copy link
Contributor

The "target record-full" would be something that has to be manual as there doesn't seem to be a way to specify it from VS Code's UI

Another hurdle will be that -list-target-features command isn't runnable until the target is set in gdb which might be after the capabilities has been returned.

@pieandcakes pieandcakes added the help wanted Can be fixed in the public (open source) repo. label Jun 26, 2018
@jfg118
Copy link
Author

jfg118 commented Jun 26, 2018

Perhaps a general option in the Debug Configuration to "Enable Reverse Debugging at startup" with a note that it Requires Reverse GDB.

This would allow the user to have different Debug Configurations, some with reverse debugging enabled and others without.

@Trass3r
Copy link

Trass3r commented Aug 26, 2020

Perhaps a general option in the Debug Configuration to "Enable Reverse Debugging at startup" with a note that it Requires Reverse GDB.

There are too many options for reverse debugging in gdb alone: https://sourceware.org/gdb/onlinedocs/gdb/Process-Record-and-Replay.html
And you probably want https://rr-project.org/ instead anyway since it's way faster.
It needs to be done in setupCommands.

Another hurdle will be that -list-target-features command isn't runnable until the target is set in gdb which might be after the capabilities has been returned.

This is indeed a fundamental problem. https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Launch comes after initialization.

But if you try to execute a reverse step without checking it will simply fail:

`-exec-finish --reverse
+reverse-finish&
result-class: error
msg: Target multi-thread does not support this command.

Btw when manually running gdb commands like finish or step the UI doesn't get notified of the new $pc.

Trass3r added a commit to Trass3r/MIEngine that referenced this issue Aug 26, 2020
Trass3r added a commit to Trass3r/MIEngine that referenced this issue Aug 26, 2020
@pirpyn
Copy link

pirpyn commented Oct 16, 2020

Hi, any status update ?

@Trass3r
Copy link

Trass3r commented Oct 16, 2020

Still in review.

@msaroufim
Copy link

Checking back, any update on this?

@evg-zhabotinsky
Copy link

For anyone who wants reverse-debugging in VsCode now: Entering this in debug console worked for me:
-exec set exec-direction reverse
After that the normal execution commands work in reverse, including the ones VsCode issues. UI updates correctly too.
When you want to go forward again, use
-exec set exec-direction forward

@Trass3r
Copy link

Trass3r commented Jun 10, 2022

Checking back, any update on this?

microsoft/MIEngine#1037 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
debugger Feature Request help wanted Can be fixed in the public (open source) repo.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants