在VS Code中调试时如何跳过外部代码

60

在使用vscode进行调试时,我想对一些我没有编写的代码进行"黑盒化"处理,以避免进入其中。我该如何实现这个功能?


我们在2023年之后因为种族不公而共同停止称之为“黑箱化”吗?似乎目前开发者工具中没有使用“黑盒”这个词。 - fivestones
9个回答

75

在您的启动或附加调试任务中,您可以输入

"skipfiles"

选项,该选项是:

"一个要在调试时跳过的文件或文件夹名称、路径模式的数组。"

例如,在跳过调试期间的Node内部代码中。

"skipFiles": [
  "${workspaceFolder}/node_modules/**/*.js",
  "${workspaceFolder}/yourLibToSkip/**/*.js"
]

此外,您可以使用“magic reference”引用内置的核心节点模块:

"skipFiles": [
  "<node_internals>/**/*.js"
]

1
请问您能否提供一些示例?我仍然无法防止进入“node_modules”文件夹内的不同依赖项文件夹(例如./node_modules/react-dom/lib/...),当调试时。启动任务的一部分是"skipFiles":"[./node_modules/**]" - Pavel L
1
@d2048请查看我对答案和包含的链接所做的修改。 - Mark
20
那个“神奇的引用”不起作用。我今天下载了VSCode,调试了一个TypeScript项目,但仍然会停在async_hooks.js - Dan Dascalescu
7
尽管在未附加调试会话时"skipFiles":["<node_internals>/**"]是可行的,但在附加进程时似乎不起作用。 - Craig Hicks
有时需要指定要忽略的文件,而不带 'js' 扩展名 例如:"<node_internals>/internal/async_hooks", "<node_internals>/internal/inspector_async_hook" - Omtechguy
显示剩余3条评论

13

我不确定在哪里设置,所以以防万一,如果您想跳过node_modulesnode_internals文件,您的.vscode/launch.json文件应该是这样的:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debug Tests",
            "type": "node",
            "request": "launch",
            ...
            "skipFiles": ["<node_internals>/**", "${workspaceFolder}/node_modules/**/*.js"]
        }
    ]
}

1
这是我在Windows上使用Chrome调试ReactJS应用程序的有效答案。 - ggariepy
我尝试了很多其他答案来解决这个问题,但都没有成功。结果发现我的问题是我把skipFiles放在configurations的同级而不是子级上。这样修改后问题就解决了。谢谢! - fivestones
非常感谢您准确地指导我在文件中放置skipFiles的位置。其他参考资料没有解释这一点。 - undefined

3

只有这个对我起作用。

"debug.javascript.terminalOptions": {
    "skipFiles": [
        "<node_internals>/**"
    ]
}

1

补充一下Mauro Aguilar正确的答案,这是我的launch.json文件的完整内容。请注意,我正在使用VS Code 1.60.2在Windows 10上调试一个ReactJS应用程序(大约是2021年),使用Chrome v.94。如果您正在使用Linux机器或Mac,则可能会有所不同。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "pwa-chrome",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://localhost:3000",
            "webRoot": "${workspaceFolder}",
            "skipFiles": ["<node_internals>/**/*.js", "${workspaceFolder}/node_modules/**/*.js"]
        },
    ]
}

1
对于使用Webpack构建的TypeScript项目,我必须将排除项放在launch.json中,而将它们放在settings.json/terminalOptions中没有任何效果。
此外,我必须排除生成的文件的模式,而不是源文件。在我的情况下,它看起来像这样:
"skipFiles": [
    "<node_internals>/**",
    "**/vendors-*",
],

0

由于某些原因,我需要添加两种类型的跳过文件条目。

  "skipFiles": [
    "${workspaceFolder}/node_modules/**/*.js",
    "<node_internals>/**"
  ],

看起来这个问题已经解决了。


0
"dart.debugExternalLibraries": false,
"dart.debugSdkLibraries": false,

如果我添加这个,调试器会在几步之后停止。


dart.debugExternalLibraries重命名为:dart.debugExternalPackageLibraries - Tomas Baran

0

对于flutter应用程序,请在用户设置中添加以下内容:

"debugExternalPackageLibraries": false,
"dart.debugSdkLibraries": false,

0

这是我的 launch.json 文件(对我有效):

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "edge",
            "request": "launch",
            "name": "Launch Edge against localhost",
            "url": "http://localhost:4200",
            "webRoot": "${workspaceFolder}",
            "skipFiles": [
              "${workspaceFolder}/node_modules/**/*.js"
            ]
        }
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接