Documentation

Troubleshooting symbol file uploads from CI/CD pipelines

Solve common problems with uploading debugging symbols from CI/CD pipelines.
Read time 5 minutesLast updated 6 hours ago

If you experience errors when you upload symbol files directly from CI/CD pipelines, then refer to the following sections for information about how to resolve each type of error:

Token fetch fails (401 Unauthorized)

When you call the token API, you receive an HTTP
401 Unauthorized
client error response.
This error occurs when your service account credentials are expired or incorrect.

Token fetch fails (403 Forbidden)

When you call the token API, you receive an HTTP
403 Forbidden
client error response.
This error occurs when the service account is missing the required permissions at the project level.

Script exits with "Path validation failed"

When you run the
usymtool
script, the script exits with the error message "Path validation failed."
This error occurs when one or more required paths don't exist on your machine.

Usymtool prints "Unity Cloud Diagnostics credentials unavailable"

The
usymtool
script prints the error message "Unity Cloud Diagnostics credentials unavailable."
This error occurs when the upload token is empty. Under normal circumstances, the script automatically fetches the upload token.

Usymtool prints "Signed URL request failed with status: 401"

The
usymtool
script prints the error message "Signed URL request failed with status: 401."
The upload token is invalid or expired. Tokens expire after seven days.

Crash reports aren't symbolicated

After you upload your symbol files, crash reports in the Dashboard still show raw addresses instead of function names. The Dashboard displays an error message that symbols are missing. For example,
<symbols missing for uuid: b809799c0ec93ee1b730342bdbf14e03>
.
This error occurs when the uploaded symbols' universally unique identifiers (UUIDs) don't match the binary that crashed.

Usymtool logs "File already exists" or returns status 409

This message appears when an existing symbol file is reuploaded to the Dashboard. This behavior is expected and not an error.
The server returns an HTTP 409 status code when
usymtool
skips a symbol file that has already been uploaded.

Usymtool warns "no symbol section" or "decoding dwarf section info... too short"

When the
usymtool
script attempts to process a symbol file, it returns one of the following error messages:
  • no symbol section
  • ELF binary has no symbol table — skipping
    (Android, Linux)
  • Mach-O binary contains a valid UUID but no symbols — skipping
    (Apple platforms)
  • PDB file contains a valid GUID but no symbol data — skipping
    (Windows)
  • decoding dwarf section info at offset 0x0: too short
    (Android, Linux, Apple)
These errors occur when the uploaded .so files contain valid UUIDs but no debug information. These symbol files are considered "stripped." On Android, the default symbol path (
Library/Bee/Android/Prj/IL2CPP/Gradle/unityLibrary/symbols/
) contains stripped .so files that are intended for the APK.
Although The
usymtool
tool accepts and uploads stripped files without reporting an error, the symbols don't help with crash symbolication due to missing debug information.
Note
These Unity Editor project settings can't be enabled from CI flags or command-line parameters. If you use
game-ci/unity-builder
or another CI build action, you must turn on the setting in your Unity project before you start the build.

Usymtool warns "no C# lines were successfully mapped to C++ lines"

When the script runs
usymtool
, it returns the following error message:
level=warning msg="Warning: -il2cppOutputPath was provided, but no C# lines weresuccessfully mapped to C++ lines. Are the values for -il2cppOutputPath and-il2cppFileRoot correct? The most common C++ file root in the symbol file was <path>,try using that instead"
This error occurs when the
-il2cppFileRoot
value doesn't match the C++ file paths embedded in the symbol file. Without a match,
usymtool
can't map C++ stack frames back to C# source lines.
The
usymtool
binary bundled with Unity 6.2 and earlier is built with an older Go compiler that can't correctly parse DWARF debug data for C# line mapping.
If you use one of these Unity versions, the following issues occur even with valid unstripped symbols and correct paths:
  • usymtool
    gives the warning that "no C# lines were successfully mapped to C++ lines."
  • C# file and line information is missing from crash reports.

Usymtool fails with "lzma: e: No such file or directory" (Unity 6.2 and earlier)

This message appears after
usymtool
finishes processing the symbols, but before it uploads them.
This error occurs only on Unity 6.2 and earlier, because these versions depend on an external
lzma
binary for compression.
GNU
lzma
doesn't support the encode
e
subcommand that the LZMA SDK uses. When GNU
lzma
is on your
PATH
, it shadows Unity's bundled binary, and the compression step fails.
Note
This error doesn't occur on Unity 6.3 and later. Newer versions of Unity use built-in
gzip
compression, and no longer depend on an external
lzma
binary.

"File exists" error during compression on retry

This message appears after
usymtool
finishes processing the symbols, but before it uploads them.
If a previous upload failed during compression, then stale temporary files in
/tmp/usym_upload/
can block the next run.