【问题标题】:VS Code "step into" debugger configurationVS Code“步入”调试器配置
【发布时间】:2020-09-11 12:37:26
【问题描述】:

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

我试图在launch.js 文件中添加"justMyCode": true 选项,但它说这个属性是不允许的。

我能做些什么来只通过源代码?

【问题讨论】:

  • 不确定 VS Code,但常规 Visual Studio 有一种方法可以将单个文件排除在“步入”行为之外。问题是您必须为每个不想介入的功能配置它。
  • 你在什么平台上使用vscode?在 linux 上,您可以通过将“nosharedlibrary”传递给 GDB 来实现这一点,或者通过包管理器简单地删除调试符号。
  • C++ 的“只是我的代码”是 Visual Studio 的一个相对较新的功能,VS Code 显然还不支持它,如果它支持的话。
  • VS Code 确实支持 "justMyCode" ...但仅适用于 Python。也许有一天它会出现在 C++ 中。
  • 我自己也遇到过同样的问题,但是使用 gdb,即使您可以使用 gdb“跳过”文件,我也无法让它在 Visual Studio 代码中工作。这是讨论此主题的 GitHub 提要:link。看起来这个问题已经被多次投票了,但还没有考虑到这一点。

标签: c++ debugging visual-studio-code vscode-debugger


【解决方案1】:

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

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

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

nameList.push_back(name); // BREAKPOINT

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

步入类型:

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

跨步类型:

Step Into 肯定会把你重定向到函数定义的任何地方,如果你想知道相关函数的声明和其他事情,这是使用 Step Into 的好机会。但是,如果您只想调试该行而不考虑深入并且不想跳到另一个文件中,则必须使用Step Over

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

【讨论】:

  • 这不是问题的答案,也不是问题的解决方案。例如。如果你想调试需要单步执行 push_back() 的自定义类型的构造函数,你不能像你建议的那样只使用“Step Over”。
  • @para Step Into 将始终深入挖掘功能及其子功能,只要您 Step Into 即可。这就像你想用做 A 的东西来做 B。注意:即使在使用 Step Over 之后,你也会在左角得到变量和它们的值。
  • Visual Studio 和 Visual Studio Code 是不同的。仔细检查问题。
  • 这确实回答了这个问题,而且 imo 它是正确的解决方案,因为他想要的功能显然不存在。
  • 这不能回答问题!如果你想进入一个参数是内置函数调用的函数,你不能只是跳过,因为你会跳过整个事情!如果不能提供解决方案,请不要回答,可以发表评论! VS 代码有扩展为其他语言提供此功能,c++ 可能,可能尚未实现,但这可以正确回答!
【解决方案2】:

这不是一个完美的答案,

假设您正在调试代码:

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

而你陷入'func_that_we_dont_care',你可以'step out'在那里,然后再次'step into',最终你会能够进入'func_that_we_care'。

【讨论】:

  • 我猜你说的是我在回答中描述的 Step Over。单步执行一个函数必须让你进入函数或子程序的定义。如果您可以忽略func_that_we_dont_care(i)) 语句而无需跳过,请定义如何执行此操作。
  • 这种情况可以通过稍微修改一下代码来解决。 auto foo = func_that_we_dont_care_about(i); /n func_that_we_care_about(foo); // step in here 次优,但有效。
猜你喜欢
  • 2018-08-16
  • 2022-06-13
  • 2021-06-20
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
相关资源
最近更新 更多