Skip to content
Snippets Groups Projects
  • Nat Goodspeed's avatar
    962ccb4f
    DRTVWR-476: Facilitate debugging test programs with logging. · 962ccb4f
    Nat Goodspeed authored
    On Mac, even if you run a test program with --debug or set LOGTEST=DEBUG, it
    won't log to stderr if you're filtering build output or running the build in
    an emacs compile buffer. This is because, on Mac, a viewer launched by mouse
    rather than from the command line is passed a stderr stream that ultimately
    gets logged to the system Console. The shouldLogToStderr() function is
    intended to avoid spamming the Console with the (voluminous) viewer log
    output. It tests whether stderr isatty() and, if not, suppresses calling
    LLError::logToStderr().
    
    This makes debugging test programs using log output trickier than necessary.
    Change shouldLogToStderr() to permit logging when either stderr isatty() or is
    a pipe. The original intention is preserved in that empirically, a viewer
    launched by mouse is passed a stderr stream identified as a character device
    rather than as a pipe.
    
    Also introduce SetEnv, a class that facilitates setting (e.g.) LOGTEST=DEBUG
    for specific test programs without setting it for all test programs in the
    build. Using the constructor for a static object means you can set environment
    variables before main() is entered, which is important because it's the main()
    function in test.cpp that acts on the LOGTEST and LOGFAIL environment
    variables.
    
    These changes make it unnecessary to retain the temporary change in test.cpp
    to force LOGTEST to DEBUG.
    962ccb4f
    History
    DRTVWR-476: Facilitate debugging test programs with logging.
    Nat Goodspeed authored
    On Mac, even if you run a test program with --debug or set LOGTEST=DEBUG, it
    won't log to stderr if you're filtering build output or running the build in
    an emacs compile buffer. This is because, on Mac, a viewer launched by mouse
    rather than from the command line is passed a stderr stream that ultimately
    gets logged to the system Console. The shouldLogToStderr() function is
    intended to avoid spamming the Console with the (voluminous) viewer log
    output. It tests whether stderr isatty() and, if not, suppresses calling
    LLError::logToStderr().
    
    This makes debugging test programs using log output trickier than necessary.
    Change shouldLogToStderr() to permit logging when either stderr isatty() or is
    a pipe. The original intention is preserved in that empirically, a viewer
    launched by mouse is passed a stderr stream identified as a character device
    rather than as a pipe.
    
    Also introduce SetEnv, a class that facilitates setting (e.g.) LOGTEST=DEBUG
    for specific test programs without setting it for all test programs in the
    build. Using the constructor for a static object means you can set environment
    variables before main() is entered, which is important because it's the main()
    function in test.cpp that acts on the LOGTEST and LOGFAIL environment
    variables.
    
    These changes make it unnecessary to retain the temporary change in test.cpp
    to force LOGTEST to DEBUG.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.