Отладчик VSCode запускает сценарии Perl в (почти) пустой среде

Я запускаю 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


Шаги по воспроизведению:

  1. Установить VSCode
  2. Установите расширение Remote – SSH.
  3. Подключиться к удаленному экземпляру SSH
  4. Установите расширение Perl — языковой сервер и отладчик для Perl;
  5. Добавьте конфигурацию для отладки скрипта (например, этого) в launch.json:
{
    "type": "perl",
    "request": "launch",
    "name": "test.pl",
    "program": "/home/user/playground/test.pl",
    "reloadModules": true,
    "stopOnEntry": true,
}
  1. Создайте скрипт:
#!/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;
}
  1. Запустите конфигурацию в отладчике и проверьте консоль вывода. Это проявляется:
$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 Все работает вне VSCode и внутри терминала VSCode, это наверняка как-то связано с VSCode/расширением/Perl, «очищающим» среду до того, как она будет унаследована отладчиком.

kos 25.08.2024 17:53

@HåkonHægland Поскольку я добавил все, что мы обсуждали, в вопрос, чтобы другие могли его увидеть, я удалил свои комментарии; не могли бы вы сделать то же самое, чтобы очистить раздел комментариев? Спасибо! И спасибо за ваш интерес.

kos 25.08.2024 18:15

Чтобы быть уверенным, что проблема именно в расширении Perl, вы можете попробовать отладить программу Python и проверить, правильный ли там PATH? Если там все верно, то проблема, скорее всего, связана с расширением Perl.

Håkon Hægland 25.08.2024 18:32

@HåkonHægland Спасибо за время, которое вы потратили, помогая с этим; Мне удалось это исправить, обновив Perl::LanguageServer через cpan Perl::LanguageServer. Поскольку моя версия модуля не была обновлена, я полагаю, что обновление расширения является технической причиной проблемы, возможно, из-за несовместимости со старой версией Perl::LanguageServer? Хотя последнему обновлению, выпущенному для расширения, уже несколько месяцев, поэтому я не знаю, почему расширение обновилось именно сейчас.

kos 26.08.2024 03:06

@HåkonHægland Если вы хотите дать ответ на это упоминание Perl::LanguageServer как возможного виновника, я отдам вам за это должное. Спасибо!

kos 26.08.2024 03:06

Приятно слышать, что вы решили проблему! Я предлагаю вам опубликовать ответ самостоятельно, поскольку вы знаете больше подробностей о том, что вы сделали, чтобы это заработало.

Håkon Hægland 26.08.2024 13:48

@HåkonHægland Хорошо, я сделал, как ты хочешь. Еще раз спасибо, что следите за этим!

kos 26.08.2024 20:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновление модуля Perl::LanguageServer устранило проблему:

cpan Perl::LanguageServer

Я предполагаю, что это произошло из-за того, что расширение внезапно обновилось до версии, которая плохо справлялась с (более старой) установленной версией Perl::LanguageServer. Что также довольно сложно объяснить, поскольку у меня было включено автоматическое обновление в расширении, а последней версии уже несколько месяцев (следовательно, я уже давно должен был столкнуться с этой проблемой), поэтому я не знаю.

В любом случае вывод таков: если вы используете расширение, всегда убедитесь, что и расширение, и Perl::LanguageServer обновлены.

Другие вопросы по теме