Crumbs is a powerful breadcrumb-generating engine.
Building the trail, step by step
Starting with the path of the current page, Crumbs finds the parent of the path, then the parent path of the parent, etc, until it has the complete breadcrumb trail.
To do this, Crumbs uses a system of plugins with user-defined priorities. On each step, it will iterate over the plugins until one of them knows the parent path for the current step. And then it moves to the next step.
On each step, Crumbs does only focus on the current step, it does not care what other steps it has calculated before. One path always has the same parent, throughout the site.
Finding a title for each path in the trail
When this procedure is done, Crumbs will do a similar procedure to find the title for each breadcrumb link in the trail. For each link, it will iterate over the plugins, until one of them knows a title. If none of them knows, the title from the router item will be used.
Important:
A breadcrumb item with an empty title will be skipped. A plugin can say "I don't know, let the others decide", but it can also explicitly return an empty title, to remove the link from the breadcrumb.
This behavior can cause some confusion, but is actually quite useful.
Plugin priorities
Crumbs plugins can be prioritized by the user, to determine the order in which the plugins are "asked" for a parent path or a link title. Plugins can also be completely disabled, to exclude them from the process.
The prioritization gets even more fine-grained than plugin level. E.g. there is only one plugin representing the hierarchy of menu links. But, prioritization can be done per menu. E.g. you could assign priority 10 for all menus, but make an exception for "primary links" which would get priority 4. At the same time, some other plugins (unrelated to menu links) could have priorities 5, 6 and 7.
Plugin priorities are configured on Admin > Structure > Crumbs (> Weights).
Priority wildcards
To avoid having to set 70 or more separate priorities, Crumbs uses a system of priority wildcards. You can set separate priorities for menu.hierarchy.primary-links, menu.hierarchy.secondary-links, menu.hierarchy.sitemap. But you can also just set one priority for menu.hierarchy.* or menu.*. Or you can let it fall back to the top-level wildcard priority key, *.
You could also set the * wildcard priority key as "disabled", which would effectively disable all your plugins, except for those that are explicitly enabled.
The wildcards are also important for newly enabled modules, or newly created menus or content types.
Instead of having to re-adjust the priorities each time a new module is installed, a menu or content type created, you can simply let them use the priority of the respective wildcard.
"disabled by default":
Some plugins are registered as "disabled by default". These are unaffected by the global * wildcard, and need to be explicitly enabled to have any effect.
E.g., the entityreference.* is "disabled by default", because most of the entityreference fields are not meant to define a parent-child relation, and even if they do, that doesn't mean you want this to be reflected in the breadcrumbs.
Instead, what you want to do is enable it only for specific fields and bundles, e.g. "entityreference.field_parent_article.node.article".