标签: vscode-debugger

在一个 vscode 窗口中调试 React 组件库,同时符号链接到主机应用程序

概括

我有一个独特的情况,我们创建了一个(由于缺乏更好的术语)“micro-ui”作为 React 组件。UI 接收 props,因此它可以动态配置自身以在我们的几个较大的应用程序中工作。由于它在多个应用程序中使用的性质,我们决定将其作为导出单个组件的组件库进行分发。它的实现效果非常好,但是调试变得有点困难/不存在。

目前,我们正在npm link本地开发依赖应用程序,同时在主机应用程序中运行它。这很有效,但我们在源映射和捕获断点方面遇到了一些问题。我们已经使用一些 Webpack 配置解决了源映射问题,但断点仍然无法在链接的依赖项应用程序中捕获。当前,调试器附加到正在运行的主机应用程序,并且依赖项应用程序只是作为本地依赖项链接。在理想的情况下,我将能够找到一种解决方案,允许我在主机应用程序或依赖项应用程序中放置断点,并且它会在调试器中捕获。

迄今为止的尝试

我目前的尝试是直接在 vscode 中调试,我想我已经差不多了。到目前为止,我已经尝试了 launch.json 文件的多个版本,并最终选定了一个在附加主机应用程序时效果非常好的版本(如下所示)。

正如您所看到的,我尝试将映射添加到 sourceMapOverrides 键,以查看是否可以将node_modules依赖项的文件夹显式指向依赖项项目根目录中的构建文件夹。我已经尝试了几种不同的方法来进行此映射,但它没有捕获链接应用程序中的断点。此外,没有抛出明显的错误,因此我无法判断我的配置是否无效。我确信我错过了一些明显的东西,但经过一整天的搜索,我似乎找不到一个好的解决方案。

预先感谢大家的时间和帮助,如果您需要更多信息,请告诉我。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "Launch Chrome against localhost",
            "url": "http://localhost:3000",
            "webRoot": "${workspaceFolder}",
            "runtimeArgs": ["--preserve-symlinks"],
            "sourceMapPathOverrides": {
                "${webRoot}/node_modules/<dependency_project>/build": "/Users/<USER>/<path_to_dependency_project>/build",
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

debugging reactjs visual-studio-code vscode-debugger chrome-debugging

5
推荐指数
0
解决办法
778
查看次数

在 VS Code 中调试 Vue.js 损坏

我正在 Visual Studio Code 中开发 Vue.js Web 应用程序 (Vue 2) 并使用 chrome 调试器扩展。我在几个月前按照这篇文章的建议设置了这个: visual-studio-code-breakpoint-appearing-in-wrong-place

一切都工作得很好,直到几天前推送了最新的 VS Code 更新(版本:1.47.0)。现在调试点出现在代码中的错误位置,就像之前链接的帖子一样。

在下面的示例 gif 中,调试器永远不会在我实际单击的断点处停止。断点跳转到第 40 行,这是调试时唯一实际中断的点。调试器永远不会停在第 142、147、150 行……只会停在第 40 行(我从未设置过)。

在此输入图像描述

以下是.vscode/launch.json过去几个月一直有效的配置:

{
    "version": "0.2.0",
    "configurations": [
        {
          "type": "chrome",
          "request": "launch",
          "name": "vuejs: chrome",
          "url": "http://localhost:8080",
          "webRoot": "${workspaceFolder}/src",
          "breakOnLoad": true,
          "sourceMapPathOverrides": {
            "webpack:///src/*": "${webRoot}/*",
            "webpack:///./src/*": "${webRoot}/*",
            "webpack:///./*": "${webRoot}/*",
            "webpack:///*": "*",
            "webpack:///./~/*": "${webRoot}/node_modules/*",
          }
        }
      ]
}
Run Code Online (Sandbox Code Playgroud)

更新

我想知道我的工作流程中的某些内容(例如切换 git 分支)是否是造成问题的原因,但事实似乎并非如此。我已经在同一个 git 分支上工作了一周,无法在多个 .vue 文件中设置断点。


2021 年 11 月更新

我目前正在调试 Vue/Electron 应用程序。该应用程序加载一个没有组件的页面,我想调试稍后加载的组件。我注意到在初始加载之前设置的断点不起作用。但是,如果我在加载该组件后在该组件中设置断点,它似乎可以工作。 …

debugging vue.js visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
3004
查看次数

Java 热代码替换 (HCR) 未在 VSCode 中更新

它曾经有效,我认为是因为 vscode 1.47.1,升级到 1.47.2 或降级到 1.46.1,同样的事情。Java 扩展和 java 调试扩展都是最新版本。

HCR 设置为自动。自动构建已启用。

尝试将 HCR 转为手动,总是得到:

找不到任何已更改的类进行热替换!

有什么建议为什么这已停止工作吗?我使用的是jdk 1.8,也尝试过java 11,同样的问题。

还想提一下,如果我更改私有方法的签名,它不会给我任何警告。它曾经告诉我代码替换失败,并询问我是否要重新启动项目。

谢谢!

eclipse-jdt visual-studio-code vscode-debugger

5
推荐指数
0
解决办法
974
查看次数

为什么 VS Code 的集成 Python 调试会启动多个调试线程?

** 更新 **

相关讨论中我得到了以下答案:

另外,在代码中需要仔细检查的是主入口点是否受到__name__=='__main__'检查保护:

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

根据结构,multiprocessing.freeze_support()如果您需要多处理支持,您可能还需要:

IE:

if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
Run Code Online (Sandbox Code Playgroud)

(如果您没有该结构,它可以解释为什么多处理多次执行您的主入口点代码)。

然而,我既没有实现上述第一个选项,也没有实现第二个选项,而且,我执行的任何脚本都可能发生这种突然的多线程行为。似乎旧的/以前的调试会话并没有在幕后真正终止,因为在一个会话中没有多线程,然后在调试时启动多会话。正常执行代码时也会发生这种情况,代码退出时出现错误,然后我(再次)进入调试会话。

我不知道如何实现它,但我应该把

if __name__ == '__main__':
    multiprocessing.freeze_support()
    main()
Run Code Online (Sandbox Code Playgroud)

在我作为主脚本执行的所有 python 脚本的开头,即我的入口点或顶级脚本?

** 原始问题 **

从所附的屏幕截图中可以看出,在通过按下执行标准调试过程(之前定义了一些断点)时,偶尔会发生以下情况:F5VS Code

VS Code 中的 Python 调试

这会导致大量额外的计算时间、滞后和冗余的控制台输出,因为相同的代码连续执行多次。

奇怪的是,这种行为似乎是随机发生的。只有有时我才能得出结论,我之前尝试启动调试会话,该会话在代码中的某个时刻被 中断,但对我来说,为什么要重新启动所有这些以前失败的调试会话以及新的调试会话,Uncaught Exception这似乎不合逻辑VS Code按下时为一F5

Shift+F5当通过或 红色方形按钮中断调试程序时,有时会在 - 窗口右下角出现Stop该消息;特别是当问题发生时,显示.timeout after 1000 msVS Codecall stack

launch.json定义集成终端调试的my - 文件的相关部分是:

{
    // !!THIS CONFIG-FILE …
Run Code Online (Sandbox Code Playgroud)

python debugging multithreading visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
2518
查看次数

如何在 VSCode 的调试器模式下查看指针指向的字符串的 char 值

假设我正在使用这个 C 程序。

  • 我有三个字符串存储在动态分配的内存中。
  • 我将这些字符串的地址存储在动态分配的指针变量中。
#include <string.h>
#include <stdlib.h>

int     main(void)
{
    char    *p0 = strdup("red..");
    char    *p1 = strdup("green");
    char    *p2 = strdup("blue.");
    char    *p3 = NULL;
    char    **pp = malloc(sizeof(char *) * 4); /* I want to watch this in VSCode debugger */

    pp[0] = p0;
    pp[1] = p1;
    pp[2] = p2;
    pp[3] = p3;

  /* do something */

    return (0);
}
Run Code Online (Sandbox Code Playgroud)

我想要实现什么

在 VSCode 调试器的监视视图中,如何让它显示每个指针指向的字符串的 char 值(如果可能的话还包括地址),如下所示?

<watch_expression_for_pp>: <address of pp>
   |- pp[0]: [6] <address of pp[0]> …
Run Code Online (Sandbox Code Playgroud)

c debugging visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
5519
查看次数

防止 vscode-jest-tests 打开新终端

我正在使用 vscode-jest 和“调试”代码镜头来运行单独的测试。然而,当运行这样的测试时,它每次都会生成一个新的终端。如何通过修改 launch.json 文件中的启动配置来防止这种情况?

作为参考,这是我的 launch.json:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "name": "vscode-jest-tests",
            "request": "launch",
            "args": [
                "--runInBand"
            ],
            "cwd": "${workspaceFolder}/data-utils/",
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen",
            "disableOptimisticBPs": true,
            "program": "${workspaceFolder}/data-utils/node_modules/jest/bin/jest"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

jestjs visual-studio-code vscode-debugger

5
推荐指数
0
解决办法
854
查看次数

如何在 vscode 中调试已编译的可执行文件?

当尝试在 vscode 中调试时,vscode 会生成launch.json配置文件。当我尝试调试时,它首先尝试编译源代码,然后调试 exe。我只想调试已编译的可执行文件(使用gcc -g选项编译)。

json 文件是:

{
    // 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": [
        {
            "name": "gcc-10 - Build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [
                "-pthread",
                "common.c"
            ],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": …
Run Code Online (Sandbox Code Playgroud)

c json visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
3034
查看次数

为什么我的 launch.json 上显示“不允许使用属性 pythonPath”?

在我的 launch.json 中,虽然该属性pythonPath工作正常,但 Intellisense 将其标记为“不允许使用属性 pythonPath”。

在此输入图像描述

python virtualenv visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
5284
查看次数

VSCode 调试器不会在 Typescript 断点处停止

我有一个带有 2 个模块(包)的 Lerna monorepo:pscli.

ps只是导出一个导入whatever的函数cli

然而,当我尝试使用 VSCode 调试此代码时,我的断点停止在生成的 Javascript 文件上,而不是我的源 Typescript 文件上。

在此输入图像描述

这已经困扰了我几个小时,我已经广泛地使用了我的tsconfig.jsonlaunch.json使用vscode-pwa-analyzer来查看 VSCode 能够检测我的源 TS 代码,但我无法找到修复方法。

编辑:我使用以下设置: macOS Big Sur v11.1 Node.js v14.8.0 Typescript v4.1.3

我上面的调试的转储文件,您可以加载到vscode-pwa-analyzer在此输入图像描述 我可以在这里看到一些未绑定断点错误。

javascript source-maps typescript visual-studio-code vscode-debugger

5
推荐指数
1
解决办法
2422
查看次数

VSCode 和 FastAPI 调试 - 不会中断路由

刚刚开始使用 FastAPI,但在尝试让它识别 VSCode 调试器中的断点时遇到了问题。奇怪的是,它确实成功地打破了路线中未包含的线路

直接从教程中提取: https: //fastapi.tiangolo.com/tutorial/debugging/

import uvicorn
from fastapi import FastAPI

app = FastAPI()  # breakpoint here works on launching file
print('here')    # breakpoint here works on launching file


@app.get("/")
def root():
    a = "a"   # breakpoint here does NOT work
    b = "b" + a
    return {"hello world": b}  # returns data successfully


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=5002)
Run Code Online (Sandbox Code Playgroud)

如上所述,路由外的线路工作正常,当我转到该地址时,我成功获取数据,但路由内的断点不会触发。不知道我在这里缺少什么。尝试过VSCode 中的 Debug FastAPI 应用程序的各种解决方案

我不确定这是否会产生影响,但这也是通过 VSCode 上的远程 SSH 扩展运行的(我的代码位于 gcloud 虚拟机上)。也许这有所贡献,但同样,其他断点也可以正常触发。

我的启动.json:

{
    // Use …
Run Code Online (Sandbox Code Playgroud)

python visual-studio-code vscode-debugger fastapi

5
推荐指数
1
解决办法
3042
查看次数