Troubleshooting¶
Use this page when results look surprising (false positive, false negative, or unexpected verdict).
1) "Why did I get API_BREAK/BREAKING unexpectedly?"¶
Check header/binary mismatch first¶
- Are these the exact headers used to build the analyzed
.so? - Are required
-Dmacros the same as build time? - Is include search path the same as build environment?
If not, fix input parity and rerun.
2) "Why is verdict COMPATIBLE, but I expected NO_CHANGE?"¶
COMPATIBLE means real differences exist (new symbols, policy changes) but no binary break.
Run JSON output for detail:
abicheck compare old.json new.json --format json -o result.json
python3 -c "import json; r=json.load(open('result.json')); print(r['verdict']); print(len(r['changes']))"
3) "How does compat mode report API_BREAK?"¶
abicheck compat uses ABICC-style report text, but still returns exit code 2
for source-level API_BREAK conditions.
If you need an explicit API_BREAK verdict string in machine-readable output,
use abicheck compare --format json.
4) "Why are deep type changes not detected?"¶
Check if the binary has DWARF debug info:
# Check for embedded DWARF sections
readelf -S libfoo.so | grep -E "\.debug_info|\.zdebug_info" || echo "No DWARF sections"
# Check for externally linked split-debug files
readelf --debug-dump=links libfoo.so # shows .gnu_debuglink / .gnu_debugaltlink references
readelf --debug-dump=follow-links libfoo.so # follows the link and inspects linked debug-info
Without DWARF, Tier 3/4 checks are limited. Use debug builds (-g) for deeper analysis.
If the binary uses split debug (separate .debug file), the linked debug info is still
analysed automatically when --debug-dump=follow-links can resolve the path.
5) CI script says success but report shows changes¶
Remember: compare exit code 0 includes both NO_CHANGE and COMPATIBLE.
If you need exact policy, parse JSON verdict instead of checking $? == 0.
6) Still unsure?¶
Open an issue with:
- command line used
- tool version (abicheck --version)
- minimal header + .so pair
- JSON output (--format json)