RFR: 8266396: Save VSCMD_DEBUG output in Windows build [v3]

John Neffenger jgneff at openjdk.java.net
Tue May 25 21:09:35 UTC 2021


On Thu, 13 May 2021 19:11:26 GMT, John Neffenger <jgneff at openjdk.org> wrote:

>> John Neffenger has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Skip sending telemetry to fix "file in use" error
>
> I wrote a Bash shell script, included below, that can help in reviewing this pull request. It isolates the call to `vcvarsall.bat`, making it easier to experiment with different choices, such as:
> 
> - leaving `VSCMD_SKIP_SENDTELEMETRY` undefined,
> - adding the `/q` option to `cmd`,
> - removing `2>&1` to use the default standard error, or
> - discarding standard output with `> /dev/null`.
> 
> 
> #!/bin/bash
> # Tests the Visual Studio 'vcvarsall.bat' batch file
> trap exit INT TERM
> set -o errexit
> 
> # Path to 'vcvarsall.bat' batch file
> vsroot="C:\\Program Files (x86)\\Microsoft Visual Studio"
> vcfile="2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat"
> vcpath="$vsroot\$vcfile"
> 
> # Windows command interpreter and options
> #   /C  Carries out the command specified by string and then terminates
> #   /Q  Turns echo off
> command="cmd /c"
> 
> # Skips calling PowerShell script to send telemetry
> export VSCMD_SKIP_SENDTELEMETRY="1"
> printf "VSCMD_SKIP_SENDTELEMETRY="%s"\n" "$VSCMD_SKIP_SENDTELEMETRY"
> 
> # VSCMD_DEBUG undefined
> unset VSCMD_DEBUG
> printf "Testing VSCMD_DEBUG="%s"\n" "$VSCMD_DEBUG"
> $command "$vcpath" x86 > 0-debug.log 2>&1
> $command "$vcpath" x64 >> 0-debug.log 2>&1
> 
> # VSCMD_DEBUG = 1 (basic), 2 (detailed), and 3 (trace)
> for n in 1 2 3; do
>     export VSCMD_DEBUG="$n"
>     printf "Testing VSCMD_DEBUG="%s"\n" "$VSCMD_DEBUG"
>     $command "$vcpath" x86 > $n-debug.log 2>&1
>     $command "$vcpath" x64 >> $n-debug.log 2>&1
> done
> 
> 
> I run the script under Cygwin on Windows and evaluate its output as follows:
> 
> 
> $ ./vcvarstest.sh
> VSCMD_SKIP_SENDTELEMETRY="1"
> Testing VSCMD_DEBUG=""
> Testing VSCMD_DEBUG="1"
> Testing VSCMD_DEBUG="2"
> Testing VSCMD_DEBUG="3"
> $ wc -l *.log
>     10 0-debug.log
>     92 1-debug.log
>    508 2-debug.log
>   5690 3-debug.log
>   6300 total

> @jgneff, do you have an idea of what kind of errors would be better detected with these changes?

Thanks for trying it, Joeri. The intent is to make all such errors better detected, but that can happen only when you run the build with `VSCMD_DEBUG=3` and when you're able to find the errors in the log file.

Without `VSCMD_DEBUG=3`, the batch files discard the output and errors of each `reg query` command, as shown below in the file `winsdk.bat`:


:GetWin10SdkDir

if "%VSCMD_DEBUG%" GEQ "3" goto :GetWin10SdkDirVerbose

call :GetWin10SdkDirHelper HKLM\SOFTWARE\Wow6432Node > nul 2>&1


In addition, it helps to have an idea what to look for in the log file because not all errors are prefixed with something helpful like `ERROR`. In the test that you ran, the following steps could lead you to the source of the problem:


$ export VSCMD_DEBUG=3
$ gradle sdk
   ︙
> FAIL: WINSDK_DIR not defined
   ︙
$ grep -A2 'reg query' build/vcvarsall.log
C:\cygwin64\home\john\src\jfx>for /F "tokens=1,2*" %i in
('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v10.0"

-------------

PR: https://git.openjdk.java.net/jfx/pull/488


More information about the openjfx-dev mailing list