Troubleshooting Notes
🔵 My output appears to be out of order: errors are not printed exactly when they occur
If you redirect stdout and stderr to a file, you may notice that stderr lines are out-of-order with respect to the stdout lines; for example:
myAnalysisProgram # stdout and stderr print when they happen; ordering appears correct
myAnalysisProgram |& tee output.txt # stderr prints when it happens, but stdout only prints when its buffer is full;
# ordering appears mixed up
stdout unbuffered:
NOTE: stdbuf on macOS may be installed as gstdbuf, from the Homebrew package coreutils.
🔵 I got a crash, but the stack trace (or debugger) is not telling me exactly where
Enable debugging symbols by setting the Iguana build option buildtype to 'debug', then rebuild.
Assuming you're in your build directory, run:
meson compile and/or meson install).
Remember to revert this change and rebuild/re-install, so that Iguana runs with
full optimization when you are processing large data sets (-D buildtype=release).
🔵 I got some error about 'chameleon', or an error in some 'chameleon' file that I can't find
Chameleon is a code generator to automatically create
iguana bindings for programming languages other than C++. All generated code
is produced in your build directory. If you have issues with Chameleon, either:
- an
Action.yamlfile is not correct - something is wrong with
chameleon
In either case, open an issue or contact the maintainers.
🔵 The CI reports an error 'xcheck failed' or 'Algorithm cross check test (xcheckalgo) failed'
Running the algorithm single-threaded produces results that do not agree with those from running the algorithm multithreaded;
there is likely a data race. Check the thread sanitizer CI job to see if it detected any data race. If not, one known
undetectable data race is calling hipo::bank::rowlist::filter with a callback function with the wrong signature:
// this is okay: the `bank` parameter is passed by lvalue reference
my_bank.getMutableRowList().filter([](auto& bank, auto row) { /* ... */ });
// this is NOT okay: the `bank` parameter is passed by value (no ampersand `&`),
// which can lead to a (rare) data race
my_bank.getMutableRowList().filter([](auto bank, auto row) { /* ... */ });