Download

Basics

The Tecken webapp handles download requests for symbols files. Tecken handles download API requests, determines whether the symbols file exists and which storage location it’s in, and returns a redirect to the storage location. In this way, we can store symbols files in multiple places and there’s a single place to request them.

For example, at the time of this writing doing a GET for https://symbols.mozilla.org//firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym will return a 302 Found redirect to the file in storage.

Try Builds

Try builds are ephemeral and we store the symbols from those builds for shorter period of time than we store symbols from regular builds. Generally, try builds are only useful in cases where engineers are debugging specific crashes in the code they’re working on. For this reason, by default, Tecken does not look for symbols files in storage locations for try build symbols files.

If you want to download symbols files for regular and try builds, you have to specify that in the download API request. There are two ways to do it:

  1. use the /try prefix

    Example:

    https://symbols.mozilla.org/try/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym
                               ^^^^
    

    This is helpful if you’re using a debugger. You can set the symbols server to:

    https://symbols.mozilla.org/try
    

    and pick up regular and try build symbols files.

  2. use the try query string parameter

    Example:

    https://symbols.mozilla.org/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym?try=1
                                                                                         ^^^^^^
    

When you do either of these, Tecken will look for symbols files in storage locations for both regular and try build symbols files with a preference for regular build symbols files first.

Downloading API

HEAD /(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
HEAD /try/(str: debug_filename)/(hex: debug_id)/(str: symbol_file)

Determine whether the symbol file exists or not.

For finding regular and try symbols files, either prefix the path with /try or include try=1 querystring parameter.

Example request:

HEAD /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1
Host: symbols.mozilla.org
User-Agent: example/1.0
HEAD /try/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1
Host: symbols.mozilla.org
User-Agent: example/1.0
Parameters:
  • debug_filename (str) – the filename of the debug file

  • debug_id (hex) – the debug id in hex characters all upper-cased

  • symbol_file (str) – the filename of the symbol file; ends with .sym

Request Headers:
  • Debug

    if true, includes a Debug-Time header in the response.

    If Debug-Time is 0.0: symbol file ends in an unsupported extension

  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Query Parameters:
  • try – use try=1 to download regular and try build symbols files with a preference for regular build symbols files

  • _refresh – use _refresh=1 to force Tecken to update cache

Status Codes:
GET /(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
GET /try/(str: debug_filename)/(hex: debug_id)/(str: symbol_file)

Download a symbol file.

For finding regular and try symbols files, either prefix the path with /try or include try=1 querystring parameter.

Example request:

GET /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1
Host: symbols.mozilla.org
User-Agent: example/1.0

Example curl:

$ curl --location --user-agent "example/1.0" --verbose \
    https://symbols.mozilla.org/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym
> GET /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1
> Host: symbols.mozilla.org
> User-Agent: example/1.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 24 Oct 2023 17:56:33 GMT
< Location: https://s3.us-west-2.amazonaws.com/org.mozilla.crash-stats.symbols-public/v1/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym
< Content-Length: 0

> GET /org.mozilla.crash-stats.symbols-public/v1/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1
> Host: s3.us-west-2.amazonaws.com
> User-Agent: example/1.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 24 Oct 2023 17:56:35 GMT
< ETag: "e2e35ff973763bcda524f147981008bc"
< Content-Encoding: gzip
< Content-Type: text/plain
< Content-Length: 143395908
<
<OUTPUT>
Parameters:
  • debug_filename (str) – the filename of the debug file

  • debug_id (hex) – the debug id in hex characters all upper-cased

  • symbol_file (str) – the filename of the symbol file; ends with .sym

Request Headers:
  • Debug

    if true, includes a Debug-Time header in the response.

    If Debug-Time is 0.0: symbol file ends in an unsupported extension

  • User-Agent – please provide a unique user agent to make it easier for us to help you debug problems

Query Parameters:
  • try – use try=1 to download regular and try build symbols files with a preference for regular build symbols files

  • _refresh – use _refresh=1 to force Tecken to update cache

Status Codes:
GET /(str: code_filename)/(hex: code_id)/(str: symbol_file)
GET /try/(str: code_filename)/(hex: code_id)/(str: symbol_file)

Same as GET /(str:debug_filename)/(hex:debug_id)/(str:symbol_file), but this will look up the debug filename and debug id for a module using the code filename and code id and return a redirect to the download API with the debug filename and debug id.

For finding regular and try symbols files, either prefix the path with /try or include try=1 querystring parameter.

Note

This is only helpful for symbols files for modules compiled for Windows. Modules compiled for other operating systems don’t have code files and code ids.

Example request:

GET /xul.dll/652DE0ED706D000/xul.sym HTTP/1.1
Host: symbols.mozilla.org
User-Agent: example/1.0
GET /try/xul.dll/652DE0ED706D000/xul.sym HTTP/1.1
Host: symbols.mozilla.org
User-Agent: example/1.0

Example curl:

$ curl --location --user-agent "example/1.0" --verbose \
    https://symbols.mozilla.org/xul.dll/652DE0ED706D000/xul.sym
> GET /xul.dll/652DE0ED706D000/xul.sym HTTP/1.1
> Host: symbols.mozilla.org
> User-Agent: example/1.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 24 Oct 2023 17:49:08 GMT
< Location: /xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym
< Content-Length: 0

> GET /xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym HTTP/1.1
> Host: symbols.mozilla.org
> User-Agent: example/1.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Location: https://s3.us-west-2.amazonaws.com/org.mozilla.crash-stats.symbols-public/v1/xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym
< Content-Length: 0

> GET /org.mozilla.crash-stats.symbols-public/v1/xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym HTTP/1.1
> Host: s3.us-west-2.amazonaws.com
> User-Agent: example/1.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 24 Oct 2023 17:49:09 GMT
< ETag: "da6d99617b2c9b1e58166f0b93bcb0ac"
< Content-Encoding: gzip
< Content-Type: text/plain
< Content-Length: 108311752
<
<OUTPUT>
Parameters:
  • code_filename (str) – the filename of the code file

  • code_id (hex) – the code id in hex characters all upper-cased

  • symbol_file (str) – the filename of the symbol file; ends with .sym