【问题标题】:Detect debug mode in VSCode Extension在 VSCode 扩展中检测调试模式
【发布时间】:2017-02-22 16:56:12
【问题描述】:

我正在开发一个 VSCode 扩展,我想编写一个简单的日志记录实用程序,它只在调试期间记录到控制台,否则,它是一个空操作。

扩展中的某处是否有可用的标志或值表明当前正在进行调试?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    如果有人仍然需要它,一种解决方案是在调试模式下启动客户端时使用自定义环境变量。

    在您的 launch.json 文件中:

    {
        "type": "extensionHost",
        "request": "launch",
        "name": "Launch Client",
        "runtimeExecutable": "${execPath}",
        "args": ["--extensionDevelopmentPath=${workspaceRoot}"],
        "outFiles": ["${workspaceRoot}/client/out/**/*.js"],
        "env": {
            "VSCODE_DEBUG_MODE": "true"
        }
    }
    

    然后,您可以像这样在代码中检查它:

    const isDebugMode = () => process.env.VSCODE_DEBUG_MODE === "true";
    
    export function activate(context: ExtensionContext) {
      if (isDebugMode()) {
        // Debug ...
      } else {
        // Else ...
      }
    }
    

    【讨论】:

      【解决方案2】:

      现在支持officially

      https://github.com/Microsoft/vscode/blob/master/src/vs/vscode.d.ts#L6431

      export namespace debug {
      
          /**
           * The currently active [debug session](#DebugSession) or `undefined`. The active debug session is the one
           * represented by the debug action floating window or the one currently shown in the drop down menu of the debug action floating window.
           * If no debug session is active, the value is `undefined`.
           */
          export let activeDebugSession: DebugSession | undefined;
      
          /**
           * The currently active [debug console](#DebugConsole).
           */
          export let activeDebugConsole: DebugConsole;
      
          /**
           * List of breakpoints.
           */
          export let breakpoints: Breakpoint[];
      
      
          /**
           * An [event](#Event) which fires when the [active debug session](#debug.activeDebugSession)
           * has changed. *Note* that the event also fires when the active debug session changes
           * to `undefined`.
           */
          export const onDidChangeActiveDebugSession: Event<DebugSession | undefined>;
      
          /**
           * An [event](#Event) which fires when a new [debug session](#DebugSession) has been started.
           */
          export const onDidStartDebugSession: Event<DebugSession>;
      
          /**
           * An [event](#Event) which fires when a custom DAP event is received from the [debug session](#DebugSession).
           */
          export const onDidReceiveDebugSessionCustomEvent: Event<DebugSessionCustomEvent>;
      
          /**
           * An [event](#Event) which fires when a [debug session](#DebugSession) has terminated.
           */
          export const onDidTerminateDebugSession: Event<DebugSession>;
      
          /**
           * An [event](#Event) that is emitted when the set of breakpoints is added, removed, or changed.
           */
          export const onDidChangeBreakpoints: Event<BreakpointsChangeEvent>;
      
      
          /**
           * Register a [debug configuration provider](#DebugConfigurationProvider) for a specifc debug type.
           * More than one provider can be registered for the same type.
           *
           * @param type The debug type for which the provider is registered.
           * @param provider The [debug configuration provider](#DebugConfigurationProvider) to register.
           * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
           */
          export function registerDebugConfigurationProvider(debugType: string, provider: DebugConfigurationProvider): Disposable;
      
          /**
           * Start debugging by using either a named launch or named compound configuration,
           * or by directly passing a [DebugConfiguration](#DebugConfiguration).
           * The named configurations are looked up in '.vscode/launch.json' found in the given folder.
           * Before debugging starts, all unsaved files are saved and the launch configurations are brought up-to-date.
           * Folder specific variables used in the configuration (e.g. '${workspaceFolder}') are resolved against the given folder.
           * @param folder The [workspace folder](#WorkspaceFolder) for looking up named configurations and resolving variables or `undefined` for a non-folder setup.
           * @param nameOrConfiguration Either the name of a debug or compound configuration or a [DebugConfiguration](#DebugConfiguration) object.
           * @return A thenable that resolves when debugging could be successfully started.
           */
          export function startDebugging(folder: WorkspaceFolder | undefined, nameOrConfiguration: string | DebugConfiguration): Thenable<boolean>;
      
          /**
           * Add breakpoints.
           * @param breakpoints The breakpoints to add.
          */
          export function addBreakpoints(breakpoints: Breakpoint[]): void;
      
          /**
           * Remove breakpoints.
           * @param breakpoints The breakpoints to remove.
           */
          export function removeBreakpoints(breakpoints: Breakpoint[]): void;
      }
      

      【讨论】:

        【解决方案3】:

        好像没有官方支持:https://github.com/Microsoft/vscode/issues/10077

        不管怎样,我发现了这种代码的平静,不知道它有多好:

        function startedInDebugMode() {
          let args = process.execArgv;
          if (args) {
            return args.some((arg) => /^--debug=?/.test(arg) || /^--debug-brk=?/.test(arg));
          }
          return false;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-08-31
          • 2020-07-27
          • 2020-07-12
          • 2021-11-20
          • 2022-07-12
          • 2021-04-09
          • 2021-05-10
          相关资源
          最近更新 更多