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

Add support for "Just My Code" debugging #5763

Open
GoaLitiuM opened this issue Jul 11, 2020 · 29 comments
Open

Add support for "Just My Code" debugging #5763

GoaLitiuM opened this issue Jul 11, 2020 · 29 comments
Labels
debugger Feature Request more votes needed Issues that have been postponed until more community members upvote it

Comments

@GoaLitiuM
Copy link

Visual Studio debugger supports skipping source files during Step In operations by reading the non-user code filters from *.natjmc and *.natstepfilter files under C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Packages\Debugger\Visualizers folder when Just My Code is enabled in VS settings. The debugger bundled with the VSCode extension comes with a similar folder, but there is no option to turn on the Just My Code option in the extension.

Related issues: #514 #3725

@cdacamar
Copy link

Hi,

I am a member of the Visual C++ compiler team and I use VSCode as my primary editor/debugging experience with the C++ extension. Due to the fact that our project involves a lot of std::variant visitor code, not having support for JMC is a real productivity blocker. Is there a possibility of adding priority to this feature?

@kkutsner
Copy link

It does not look like this is a priority issue which is a bummer because without JMC the debugging experience really sucks on those projects that are bigger than just simple "hello world" application.

@WardenGnaw Is this just a matter of getting more people to vote on this issue?

@BradyDonovan
Copy link

@kkutsner

Yes, that appears. @WardenGnaw mentioned this here:
#6668 (comment)

Please vote on #5763 by adding a 👍 to help us prioritize our features.

Anyway, I voted. I am curious to know what threshold must be met for this to be prioritized. To @kkutsner's point, debugging on any large project becomes clumsy rather quickly.

@kkutsner
Copy link

kkutsner commented Mar 1, 2021

@BradyDonovan

It looks like we may need a lot of votes: https://github.com/microsoft/vscode/issues/21839 (I pasted link as a code so this issue should not reference the other issue). That issue over 700 votes and still it is not on its way...

I'm curious, this extenstion has so many user installations, but it looks like no one really uses VSCode for debugging C++ code...

@sean-mcmanus
Copy link
Collaborator

@kkutsner The vote count of the VS Code issue you referenced is not relevant, since it's managed by another team and they have a larger user base (all of VS Code instead of just C/C++ users). Our highest upvoted issue is #206 .

Lots of people use our extension for debugging C++. You can use Go to Definition and set a breakpoint in the definition you want to step into to get around the issue.

@kkutsner
Copy link

kkutsner commented Mar 1, 2021

@sean-mcmanus

@kkutsner The vote count of the VS Code issue you referenced is not relevant, since it's managed by another team and they have a larger user base (all of VS Code instead of just C/C++ users). Our highest upvoted issue is #206 .

Fair point! Sorry for mentioning not quite relevant issue.

Lots of people use our extension for debugging C++. You can use Go to Definition and set a breakpoint in the definition you want to step into to get around the issue.

Yeah, that workaround may work sometimes, but such workaround is a productivity killer like @cdacamar mentioned already. Let's consider a test code below:
image

I need to step through lines 46 to 52 and I want to step into line 49 for every element. In VisualStudio, I only need 4+n keyboard clicks to do that, where n is the number of elements in the vector. With "Go to Definition" workaround that is a lot more, even for such artifical code example. It is because every time I need to "Step Into" I may need to do "go to definition" then put a breakpoint (or "Run to Cursor" that sets temprorary breakpoint automatically). Also, I need to put a breakpoint after the statement before doing "Step Into" in the case something goes wrong and I did the previous breakpoint on a wrong line. After all I need to cleanup any of those breakpoints...Those extra actions take additional time and patience and that is adding up quickly.

@sean-mcmanus
Copy link
Collaborator

For your sample code, can't you just set a breakpoint on line 49? Go to Definition isn't needed because the definition is on line 49.

I agree that doing the Go to Definition and setting the breakpoint (or doing multiple step in/outs) is annoying, although with debugging our code base I haven't found it a productivity killer enough to switch to VS debugging. I think the intent initially was for VS to be the "premier" debugging experience (paid/licensed product) so they didn't want to move too many debugging features into VS Code, but I don't know how much that reasoning applies to this particular issues versus other factors, such as team resources (I don't work on the debugger).

@kkutsner
Copy link

kkutsner commented Mar 2, 2021

For your sample code, can't you just set a breakpoint on line 49? Go to Definition isn't needed because the definition is on line 49.

Yep, I can.

I think the intent initially was for VS to be the "premier" debugging experience (paid/licensed product) so they didn't want to move too many debugging features into VS Code, but I don't know how much that reasoning applies to this particular issues versus other factors, such as team resources (I don't work on the debugger).

Every dev on our team has paid VS licenses. But I found that a lot of my workflows I can do using VSCode much faster: it is keyboard centric, minimalistic, mostly runs much faster than VS....

Interestingly, that Microsoft is releasing a standalone debugger application https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugging-using-windbg-preview that has even more features that VS can provide as a debugging experience, for example, use JS scripting to to script the debugger - mind blowing (Something similar that GDB also can do using Python for a while)!

@kingsimba
Copy link

kingsimba commented Apr 3, 2021

For your sample code, can't you just set a breakpoint on line 49? Go to Definition isn't needed because the definition is on line 49.

I agree that doing the Go to Definition and setting the breakpoint (or doing multiple step in/outs) is annoying, although with debugging our code base I haven't found it a productivity killer enough to switch to VS debugging. I think the intent initially was for VS to be the "premier" debugging experience (paid/licensed product) so they didn't want to move too many debugging features into VS Code, but I don't know how much that reasoning applies to this particular issues versus other factors, such as team resources (I don't work on the debugger).

With smart pointers use everywhere, this is definitely a productivity killer!
There are trivial function calls everywhere.

std::shared_ptr<Image> image = std::make_shared<Image>(10, 20);
createNewImage(Size(image->width(), image->height())); 

Step on line 2 will go into : shared_ptr::operator->(), image::width(), shared_tr::operator->(), image::height(), Size::Size(int, int). And then into createNewImage.

With Visual Studio's *.natstepfilter. All this will not happen.

@maartennauta
Copy link

I'm wondering if I should just switch to Visual Studio proper. Since vector-of-bool is not in charge of the extension anymore it seems its not really being developed anymore. My suspicion is also that VS Code is deprioritized to get people to move to Visual Studio.

@sean-mcmanus
Copy link
Collaborator

@maartennauta vector-of-bool worked on the CMake Tools extension -- our team is still developing that extension. This debugging issue is not related to the CMake Tools extension. Were you hitting some other issue?

@maartennauta
Copy link

@sean-mcmanus No, my mistake probably was to assume he also worked on the cpptools extension. It seems this is the issue im also hitting (just wanting to step through my own code in the project directory when debugging C++ in VS Code, ignoring std internals and boost libraries etc) and have voted accordingly. I guess a similar request applies to "stop on exception" where I would want to only stop on all exceptions in my own code, I dont know if that is a separate issue. I have not used Just-My-Code in Visual Studio in a while so I do not know if it provides that functionality for exceptions.

@Rhahkeem
Copy link

Rhahkeem commented Oct 8, 2022

This is absolutely necessary. When debugging and stepping in/through my code I always end up stepping into a bunch of std code. It would be great to just step through and not have worry about code other than my own when debugging an issue

@ChenLI00
Copy link

ChenLI00 commented Oct 9, 2022

It has been two years since this problem was raised. Could it be solved in the near future.

@microsoft microsoft deleted a comment from sean-mcmanus Oct 28, 2022
@sean-mcmanus
Copy link
Collaborator

@WardenGnaw Is this feature on the debugger team backlog? Maybe those issues could be labeled with Needs more votes to help prioritize?

@WardenGnaw
Copy link
Member

Yep. This feature work is in the backlog for the debugger.

Please react to the top post with a 👍 to vote on this feature.
We will assign this issue a milestone when it's been moved off the backlog.

@WardenGnaw WardenGnaw added the more votes needed Issues that have been postponed until more community members upvote it label Oct 28, 2022
@akkkc
Copy link

akkkc commented Oct 30, 2022

是的。此功能工作在调试器的积压工作中。

请用👍对此功能进行投票。当此问题从积压工作中移出时,我们将为此问题分配一个里程碑。

Now there are 58 votes. I want to know how many votes are needed to remove the problem from the backlog

@sean-mcmanus
Copy link
Collaborator

@akkkc For comparison, #1201 has 86 upvotes and it's also not assigned to a milestone yet.

@fjtb1989
Copy link

its necessary,plz add it

@jepperaskdk
Copy link

jepperaskdk commented Dec 26, 2022

This is my workaround while this feature is not enabled: GDB supports skipping files/functions and these can be predefined in e.g. ~/.gdbinit.
Put e.g. this in that file (adjust versions as needed):

skip -gfi /usr/include/c++/11/bits/*.h

It will now skip all headers in that directory.
See this link for more options for skips: https://sourceware.org/gdb/download/onlinedocs/gdb/Skipping-Over-Functions-and-Files.html
You can directly specify files or regex for functions. Sadly, it doesn't seem like recursive globbing is supported, so I haven't been able to skip e.g. the entire /usr/include directory. https://sourceware.org/bugzilla/show_bug.cgi?id=22198

As more functions are used, you can just add more directories to be skipped.

@joelspadin-garmin
Copy link

Unfortunately, GDB won't stop on user code that's called from non-user code when using skip, so that workaround can't be used for things like skipping over the implementation of std::function() to get to the actual function call.

From piecing together info from StackOverflow, I found that this Python script works on the command line:

def stop_handler(event):
    if gdb.selected_frame().name().startswith("std::"):
        gdb.execute("step")

gdb.events.stop.connect(stop_handler)

But if I use it when debugging from VS Code, as soon as I step into any std:: function, the debugger exits with

ERROR: Error while trying to enter break state. Debugging will now stop. Failed to find thread 2 for break event

@quyykk
Copy link

quyykk commented Jan 5, 2023

Please react to the top post with a +1 to vote on this feature.

How many votes do we need? This is such a productivity killer, I'm really surprised this isn't prioritized. The workaround works for simple cases, but C++ has a ton of hidden function calls everywhere so it's really annoying.

@sean-mcmanus
Copy link
Collaborator

@quyykk I don't know exactly how many votes are needed, but more than 100 would help (there are 2 other debugger features with more up votes).

@ChenLI00
Copy link

ChenLI00 commented Jul 5, 2023

我不知道确切需要多少票,但超过 100 票会有所帮助(还有 2 个其他调试器功能具有更多的赞成票)。

There are now 101 tickets available. Will this feature be added?

@hipepe
Copy link

hipepe commented Aug 25, 2023

Is there an alternative solution?

@lowmee
Copy link

lowmee commented Sep 1, 2023

This is a practical feature, please add it

@Zingam
Copy link

Zingam commented Sep 8, 2023

Voted: +1, closing: #11417

@Zingam
Copy link

Zingam commented Sep 8, 2023

Debugging doesn't seem to be getting much attention.
There are a few outstanding issues:

  1. /JMC support on Windows
  2. Debugger driver llvm-mi memory leak on macOS
  3. No support for debugging as root

@cyraid
Copy link

cyraid commented Jan 4, 2024

I voted too. @WardenGnaw How many more votes are needed? It's currently at 122, seems pretty substantial at this point. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
debugger Feature Request more votes needed Issues that have been postponed until more community members upvote it
Projects
None yet
Development

No branches or pull requests