I'm running VSCode on OpenSuse Leap 15.6, connecting to a remote SSH instance running on Ubuntu 22.04. Client and server are both updated.
I've been using the Perl - Language Server and Debugger for Perl extension for years without any problems.
Since a few weeks the scripts that I attempt to debug in order to fix minor (unrelated) problems die when run into the debugger.
I figured this is due to some missing environment variables, specifically some environment variables I defined in /etc/environment
; turns out, only these environment variables are available to my scripts when they run in the debugger:
$VAR1 = 'PLSDI_REMOTE=127.0.0.1:13605';
$VAR1 = 'PERL5DB=BEGIN { $| = 1 ; require Perl::LanguageServer::DebuggerInterface }';
$VAR1 = 'PLSDI_SESSION=95bf6688-2283-4f55-b02e-ca37ae4d6027';
$VAR1 = 'PLSDI_OPTIONS=reload_modules';
Basically everything is missing. Most notably, PATH
, whose absence is preventing a few commands that are run in backticks (that are meant to undergo shell interpretation) from being resolved to actual executables.
Perl scripts run in VSCode's terminal / outside of VSCode (for example when connected to the server via SSH) run perfectly and have access to the full environment. The environment is empty only when the scripts are run in VSCode's debugger.
My launch.json
configurations never explicitly set any environment variable, yet everything has been working fine up until now.
Did something change? I may have inadvertedly changed something that led to this, but if that's the case, for the life of me I can't figure out what it is.
What could be the reason for the suddenly empty environment?
Right now I'm explicitly setting the environment in each and every launch.json
configuration I need to run, which is getting annoying pretty fast.
% code --version
1.92.0
b1c0a14de1414fcdaa400695b4db1c0799bc3124
x64
Remote - SSH version: v0.113.1
Perl - Language Server and Debugger for Perl version: v2.6.2
Steps to reproduce:
launch.json
:{
"type": "perl",
"request": "launch",
"name": "test.pl",
"program": "/home/user/playground/test.pl",
"reloadModules": true,
"stopOnEntry": true,
}
#!/usr/bin/env perl
use strict;
use warnings;
use open qw(:std :utf8);
use Data::Dumper;
while (my ($k, $v) = each(%ENV)) {
print Dumper $k . '=' . $v;
}
$VAR1 = 'PLSDI_REMOTE=127.0.0.1:13605';
$VAR1 = 'PERL5DB=BEGIN { $| = 1 ; require Perl::LanguageServer::DebuggerInterface }';
$VAR1 = 'PLSDI_SESSION=95bf6688-2283-4f55-b02e-ca37ae4d6027';
$VAR1 = 'PLSDI_OPTIONS=reload_modules';
Updating the Perl::LanguageServer module fixed the issue:
cpan Perl::LanguageServer
I'll speculate this was due to the extension suddenly updating to a version that didn't cope well with the (older) installed version of Perl::LanguageServer. Which also is kinda hard to explain since I had auto-update turn on on the extension and the last version is several months old (hence I should've long experienced the issue), so I don't know.
Anyways the takeaway is, if you're using the extension, always make sure both the extension and Perl::LanguageServer are up to date.