выглядит как ошибка в компоненте Symfony VarDumper , в /vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php
рядом со строкой 101, замените
if (null !== $this->projectDir) {
$context['project_dir'] = $this->projectDir;
if (0 === strpos($file, $this->projectDir)) {
$context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR);
}
}
на
if (isset($this->projectDir) && is_string($this->projectDir) && strlen($this->projectDir) > 0) {
$context['project_dir'] = $this->projectDir;
if (0 === strpos($file, $this->projectDir)) {
$context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR);
}
}
, который должен это исправить ,
кто-то должен также подать отчет об ошибке, чтобы он был исправлен вверх по течению.
Одним из способов решения проблемы является косвенное обращение к файлу.
Примерно так
foo.exe > tmp.txt
set FOOERR=%ERRORLEVEL%
cat tmp.txt
exit %FOOERR%
После примерно одного дня раскопок я нашел способ сделать это:
set error_=0
9>&1 1>&2 2>&9 (for /f "delims=" %%i in ('9^>^&1 1^>^&2 2^>^&9 ^(^(^(2^>^&1 call "%homeDir%%1"^) ^|^| ^(1^>^&2 2^>nul echo FAILED^)^) ^| 2^>nul "%homeDir%mtee" /T /+ "%homeDir%logs\%date_%_%1.log"^)') do (set error_=1))
exit /b %error_%
В приведенном выше примере выполняется "%homeDir%%1" и его вывод передается в "%homeDir%mtee". Эта строка обнаруживает сбои (я бы предложил вам нарисовать диаграмму контекстов пакетов и их назначений stdin/stdout/stderr, чтобы понять, что она делает :-). ). Я не нашел хорошего способа извлечь реальный уровень ошибок. Лучше всего мне удалось заменить команду 'echo' на какой-нибудь вызов пакетного скрипта 'call rc.bat', который выглядит как:
@echo %errorlevel%
а затем заменить 'set error_=1' на 'set error_=%%i'.
Но проблема в том, что этот вызов тоже может дать сбой, и это не так просто обнаружить. Тем не менее, это намного лучше, чем ничего - я не нашел решения для этого в интернете.
Вы можете решить проблему, создав обертку вокруг вашего командного файла:
rem wrapper for command file, wrapper.cmd
call foo.exe
echo %errorlevel%
if errorlevel 1 goto...
Затем добавьте tee к обертке:
wrapper.cmd | tee result.log
Конечно, это не совсем то же самое, например, если вы хотите войти в несколько файлов в обернутом файле, это невозможно, но в моем случае это решило проблему.