Я запускаю VSCode на OpenSuse Leap 15.6 и подключаюсь к удаленному экземпляру SSH, работающему на Ubuntu 22.04. Клиент и сервер обновлены.
Я использую расширение Perl — языковой сервер и отладчик для Perl уже много лет без каких-либо проблем.
Через несколько недель скрипты, которые я пытаюсь отладить, чтобы исправить мелкие (несвязанные) проблемы, умирают при запуске в отладчике.
Я решил, что это связано с отсутствием некоторых переменных среды, в частности некоторых переменных среды, которые я определил в /etc/environment
; оказывается, что моим сценариям доступны только эти переменные среды, когда они выполняются в отладчике:
$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';
В основном все отсутствует. В частности, PATH
, отсутствие которого не позволяет нескольким командам, запускаемым в обратных кавычках (которые предназначены для интерпретации оболочки), преобразоваться в реальные исполняемые файлы.
Скрипты Perl, запускаемые в терминале VSCode/вне VSCode (например, при подключении к серверу через SSH), работают отлично и имеют доступ ко всей среде. Среда пуста только тогда, когда сценарии запускаются в отладчике VSCode.
В моих конфигурациях launch.json
никогда явно не задаются переменные среды, но до сих пор все работало нормально.
Что-то изменилось? Возможно, я случайно изменил что-то, что привело к этому, но если это так, то я, хоть убей, не могу понять, что это такое.
В чем может быть причина внезапно опустевшего окружения?
Прямо сейчас я явно настраиваю среду в каждой launch.json
конфигурации, которую мне нужно запустить, и это довольно быстро начинает раздражать.
% code --version
1.92.0
b1c0a14de1414fcdaa400695b4db1c0799bc3124
x64
Удаленный доступ — версия SSH: v0.113.1.
Perl — языковой сервер и отладчик для версии Perl: v2.6.2
Шаги по воспроизведению:
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';
@HåkonHægland Поскольку я добавил все, что мы обсуждали, в вопрос, чтобы другие могли его увидеть, я удалил свои комментарии; не могли бы вы сделать то же самое, чтобы очистить раздел комментариев? Спасибо! И спасибо за ваш интерес.
Чтобы быть уверенным, что проблема именно в расширении Perl, вы можете попробовать отладить программу Python и проверить, правильный ли там PATH? Если там все верно, то проблема, скорее всего, связана с расширением Perl.
@HåkonHægland Спасибо за время, которое вы потратили, помогая с этим; Мне удалось это исправить, обновив Perl::LanguageServer через cpan Perl::LanguageServer
. Поскольку моя версия модуля не была обновлена, я полагаю, что обновление расширения является технической причиной проблемы, возможно, из-за несовместимости со старой версией Perl::LanguageServer? Хотя последнему обновлению, выпущенному для расширения, уже несколько месяцев, поэтому я не знаю, почему расширение обновилось именно сейчас.
@HåkonHægland Если вы хотите дать ответ на это упоминание Perl::LanguageServer как возможного виновника, я отдам вам за это должное. Спасибо!
Приятно слышать, что вы решили проблему! Я предлагаю вам опубликовать ответ самостоятельно, поскольку вы знаете больше подробностей о том, что вы сделали, чтобы это заработало.
@HåkonHægland Хорошо, я сделал, как ты хочешь. Еще раз спасибо, что следите за этим!
Обновление модуля Perl::LanguageServer устранило проблему:
cpan Perl::LanguageServer
Я предполагаю, что это произошло из-за того, что расширение внезапно обновилось до версии, которая плохо справлялась с (более старой) установленной версией Perl::LanguageServer. Что также довольно сложно объяснить, поскольку у меня было включено автоматическое обновление в расширении, а последней версии уже несколько месяцев (следовательно, я уже давно должен был столкнуться с этой проблемой), поэтому я не знаю.
В любом случае вывод таков: если вы используете расширение, всегда убедитесь, что и расширение, и Perl::LanguageServer обновлены.
@HåkonHægland Все работает вне VSCode и внутри терминала VSCode, это наверняка как-то связано с VSCode/расширением/Perl, «очищающим» среду до того, как она будет унаследована отладчиком.