[wpiutil] Add JNI access to C++ stderr (#4381)

This is useful in some debugging scenarios.  System.err is separately buffered, so when e.g. debugging test cases it doesn't interleave correctly with the C++ stdout/stderr logging. Even using flush() doesn't seem to help, I think because Gradle does its own buffering.
This commit is contained in:
Peter Johnson
2022-08-30 20:40:16 -07:00
committed by GitHub
parent fdb5a2791f
commit d22ff8a158
2 changed files with 15 additions and 0 deletions

View File

@@ -5,6 +5,7 @@
#include <jni.h>
#include "edu_wpi_first_util_WPIUtilJNI.h"
#include "fmt/format.h"
#include "wpi/Synchronization.h"
#include "wpi/jni_util.h"
#include "wpi/timestamp.h"
@@ -41,6 +42,18 @@ JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) {
interruptedEx.free(env);
}
/*
* Class: edu_wpi_first_util_WPIUtilJNI
* Method: writeStderr
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_edu_wpi_first_util_WPIUtilJNI_writeStderr
(JNIEnv* env, jclass, jstring str)
{
fmt::print(stderr, "{}", JStringRef{env, str});
}
/*
* Class: edu_wpi_first_util_WPIUtilJNI
* Method: enableMockTime