VS Code“单步执行”调试器配置

VS Code "step into" debugger configuration

提问人:P. Milev 提问时间:5/25/2020 更新时间:7/2/2020 访问量:4052

问:

当我在 VS Code 中调试我的 C++ 项目并切换断点时,“单步执行”选项将我重定向到外部文件/库,但我只想单步执行我的代码。

我试图在文件中添加选项,但它说不允许此属性。"justMyCode": truelaunch.js

我该怎么做才能只浏览源代码?

C++ 调试 visual-studio-code vscode-debugger

评论

0赞 Mark Ransom 5/30/2020
不确定 VS Code,但常规 Visual Studio 有一种方法可以从“单步执行”行为中排除单个文件。问题是你必须为你不想进入的每个功能配置它。
0赞 5/31/2020
您在什么平台上使用 vscode?在 linux 上,您可以通过将“nosharedlibrary”传递给 GDB 来实现这一点,或者只需通过包管理器删除调试符号即可实现此目的。
0赞 Taekahn 6/1/2020
C++的“只是我的代码”是Visual Studio的一个相对较新的功能,VS Code显然还不支持它,如果有的话。
0赞 jdaz 6/5/2020
VS Code 确实支持“justMyCode”......但仅适用于 Python。也许有一天它会出现在 C++ 中。
0赞 Bogdan Ariton 5/26/2021
我自己也遇到过同样的困难,但是使用 gdb,即使您可以使用 gdb“跳过”文件,我也无法让它在 Visual Studio 代码中工作。下面是讨论此主题的 GitHub 源:链接。看起来这个问题已经被多次投票赞成,但尚未考虑这一努力。

答:

0赞 Rohan Bari 5/29/2020 #1

对于这个问题,可以做一件事。我实际上测试了我自己的测试程序:

std::vector<std::string> name;

std::cout << "Enter a name: ";
std::getline(std::cin, name);

nameList.push_back(name); // BREAKPOINT

当我们在断点执行中进行选择时,它会重定向到实际定义它的函数的定义,在这种情况下,它不会只针对您的文件进行调试。Step Into

步入类型:

Step Into Type Debugging

相反,您必须使用,因为它不会尝试查找函数定义,并且您可以直接调试内容。Step Over

跨步类型:

Step Over Type Debugging

它肯定会将你重定向到函数定义,无论它在哪里定义,如果你想知道相关函数的声明和其他事情,这是使用 Step Into 的好机会。但是,如果您只想调试该行,而不考虑深入研究并且不想跳转到另一个文件中,则必须使用 .Step IntoStep Over

如果您想了解更多关于 Step Into 和 Step Over 的信息,您可以浏览 Stack Overflow 线程。我发现这也很有帮助。

评论

2赞 6/1/2020
这不是问题的答案,也不是问题的解决方案。例如,如果你想调试一个自定义类型的构造函数,你需要单步执行 push_back(),你不能只按照你的建议使用“单步执行”。
0赞 Rohan Bari 6/1/2020
只要您步入其中,@para Step Into 将始终深入研究功能及其子功能。这就像你想用做 A 的事情来做 B 一样。 注意:即使在使用“单步执行”之后,您也会在左上角看到变量及其值。
1赞 Rohan Bari 6/1/2020
Visual Studio 和 Visual Studio Code 是不同的。仔细检查问题。
1赞 Taekahn 6/1/2020
这确实回答了这个问题,imo 这是正确的解决方案,因为他想要的功能显然不存在。
2赞 mdatsev 6/3/2020
这并不能回答问题!如果你想单步执行一个参数是内置函数调用的函数,你不能只是单步执行,因为你会跨过整个事情!如果您无法提供解决方案,请不要回答,您可以发表评论!VS 代码有一些扩展可以为其他语言提供此功能,对于 c++ 来说是可能的,也许还没有实现,但这个问题可以正确回答!
-1赞 grizzlybears 7/2/2020 #2

这不是一个完美的答案,

假设您正在调试以下代码:

func_that_we_care ( func_that_we_dont_care( i)  );   <== step into this line

你陷入“func_that_we_dont_care”,你可以“走出去”,然后再次“走进”,最终你将能够进入“func_that_we_care”。

评论

1赞 Rohan Bari 7/2/2020
我猜你说的是我在回答中描述的 Step Over。单步执行函数时,必须将您置于函数或子例程的定义中。如果可以在不单步执行的情况下忽略语句,则定义如何执行此操作。func_that_we_dont_care(i))
0赞 Mark Storer 8/24/2020
这种情况可以通过稍微编辑代码来解决。 次优,但有效。auto foo = func_that_we_dont_care_about(i); /n func_that_we_care_about(foo); // step in here