dotnet/runtime · error · RuntimeError
{} not found
Error message
{} not found What it means
Raised by download_clrjit_pintool when download_files() for the Intel Pin pintools package returned no local files (the Azure blob `{pintools_root}/{version}/{os}.{zip|tar.gz}` is missing/unreachable). Pin is required for instruction-count measurements.
Source
Thrown at src/coreclr/scripts/superpmi.py:5006
pintool_filename = "libclrjit_inscount.so"
return os.path.join(get_pintools_path(coreclr_args), "clrjit_inscount_" + coreclr_args.arch, pintool_filename)
def download_clrjit_pintool(coreclr_args):
""" Download the pintool package for doing measurements of the JIT from Azure Storage.
"""
if os.path.isfile(get_pin_exe_path(coreclr_args)):
return
pin_dir_path = get_pintools_path(coreclr_args)
extension = "zip" if coreclr_args.host_os.lower() == "windows" else "tar.gz"
pintools_rel_path = "{}/{}/{}.{}".format(az_pintools_root_folder, pintools_current_version, coreclr_args.host_os.lower(), extension)
pintool_uri = "{}/{}".format(az_blob_storage_superpmi_container_uri, pintools_rel_path)
local_files = download_files([pintool_uri], pin_dir_path, verbose=False, is_azure_storage=True, fail_if_not_found=False)
if len(local_files) <= 0:
logging.error("Error: {} not found".format(pintools_rel_path))
raise RuntimeError("{} not found".format(pintools_rel_path))
def setup_args(args):
""" Setup the args for SuperPMI to use.
Args:
args (ArgParse): args parsed by arg parser
Returns:
args (CoreclrArguments)
"""
# Start setting up logging.
# Set up the console logger immediately. Later, after we've parsed some arguments, we'll add the file logger and
# change the console logger level to the one parsed by the arguments. We need to do this initial setup before the first
# logging command is executed.
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)View on GitHub (pinned to 290d5ab72c)
Solutions
- Confirm the exact blob exists: open az_blob_storage_superpmi_container_uri + '/' + pintools_rel_path in a browser/curl.
- Verify network/proxy can reach the Azure storage container.
- Check host_os is one the pintools package is published for (windows/linux/osx).
- Manually download the archive and extract into get_pintools_path() to satisfy isfile(get_pin_exe_path).
Example fix
// before # pintools archive missing for new version -> raises [186] // after # pin a known-good pintools_current_version, or stage the archive manually curl -o pin.tgz <pintool_uri> && tar -xzf pin.tgz -C $SPMI/pintools/<version>/<os>
Defensive patterns
Strategy: validation
Validate before calling
import urllib.request, os
uri = az_blob_storage_superpmi_container_uri + '/' + pintools_rel_path
with urllib.request.urlopen(uri, timeout=10) as r:
if r.status != 200:
raise SystemExit(f'pintools blob unreachable: {uri}')
print('pintools archive reachable') Type guard
def pintools_blob_reachable(uri: str) -> bool:
import urllib.request
try:
with urllib.request.urlopen(uri, timeout=10) as r:
return r.status == 200
except Exception:
return False Try / catch
try:
download_clrjit_pintool(coreclr_args)
except RuntimeError as e:
if 'not found' in str(e) and 'pintools' in str(e).lower():
stage_pintools_archive_manually(); download_clrjit_pintool(coreclr_args) Prevention
- Pre-stage the pintools archive in spmi_location
- Confirm pintools_current_version is published for your host_os
- Whitelist the Azure storage endpoint on proxies
When it happens
Trigger: isfile(get_pin_exe_path) is false on entry and the HTTP/azure download of the pintools archive yields zero files (fail_if_not_found=False suppresses the inner error).
Common situations: pintools_current_version bumped but the blob not yet published for this os; unsupported host_os; proxy blocking the storage endpoint; the version folder was rotated out.
Related errors
- No baseline JIT found
- Didn't find any collections using %s
- No baseline JIT found
- Unable to find MinGit asset for arch '{arch}'. Available ass
- Please install `node-fetch` and `node-abort-controller` npm
AI-assisted analysis of dotnet/runtime@290d5ab72c (2026-08-06).
Data as JSON: /api/errors/d8316c706e48c3f7.
Report an issue: GitHub.