with one click
debugging-processes
// Use when diagnosing failed, stuck, or misbehaving AiiDA processes or the daemon.
// Use when diagnosing failed, stuck, or misbehaving AiiDA processes or the daemon.
Use when adding a new `verdi` subcommand in `src/aiida/cmdline/`.
Use when adding a new third-party dependency to aiida-core's `pyproject.toml`.
Use when exploring the aiida-core codebase structure, looking for key files, or understanding how packages relate to each other.
Use when making commits, creating branches, or preparing pull requests for aiida-core.
Use when deprecating a public Python API or `verdi` CLI command in aiida-core.
Use when running pre-commit, linting, type checking, or fixing CI failures in aiida-core.
| name | debugging-processes |
| description | Use when diagnosing failed, stuck, or misbehaving AiiDA processes or the daemon. |
verdi process status <PK> # call stack and where execution stopped
verdi process report <PK> # log messages emitted during execution
verdi process show <PK> # inputs, outputs, exit code
verdi node show <PK> # node attributes and extras
For a full provenance dump including input/output files:
verdi process dump <PK> # dump a process and its provenance
For CalcJobs specifically, jump to the remote working directory on the HPC (requires SSH access, which may not be available for sandboxed agents):
verdi calcjob gotocomputer <PK>
# storage (PostgreSQL or SQLite) + daemon & broker (RabbitMQ, if configured):
verdi status
# tail daemon logs in real-time
# best with a single daemon worker, multiple workers garble output:
verdi daemon logshow
# requeue processes stuck after a daemon crash (stop the daemon first):
verdi process repair
waiting : usually means the daemon lost track of it after a crash or restart. Run verdi process repair to requeue.seal() has been called; only _updatable_attributes can change on a stored ProcessNode before sealing.presto-marked test failures : these use an in-memory SqliteTempBackend, so the bug is in the code, not in service configuration.start_new_session=True or they inherit the daemon's signal handling and die with it.verdi shell # interactive IPython shell with AiiDA loaded
verdi devel run-sql "SELECT ..." # run raw SQL against the profile database (USE WITH CAUTION)
Useful patterns inside verdi shell:
from aiida.orm import QueryBuilder, Node, load_node
# Find nodes by type
qb = QueryBuilder().append(Node, filters={'node_type': {'like': 'data.core.dict.%'}})
# Inspect a specific node
node = load_node(<PK>)
node.base.attributes.all # all stored attributes
node.base.extras.all # all extras (mutable even after storing)
node.base.repository.list_object_names() # files in the node's repository
src/aiida/engine/runners.pysrc/aiida/engine/daemon/client.pysrc/aiida/engine/daemon/execmanager.pysrc/aiida/engine/processes/calcjobs/tasks.py