OK i was just looking into this.
1) breadcrumbs.phtml will always be the template that outputs breadcrumbs
2) Breadcrumbs is on every page because it is set in page.xml, which controls the base layout for everything. You sometimes don’t see the breadcrumbs (for instance, on your cart page) because the crumbs array is sometimes left empty, and the template only outputs stuff if the array is NOT empty.
You might be then asking yourself “well then where are the breadcrumbs being set ?!”
This took me some time to find.
The Block php (breadcrumbs.php) file controlling the breadcrumbs.phtml template has (like many items of this variety) only one notable function - “addCrumbs” - this function is only used to add to the breadcrumb list. The actual breadcrumbs used are set elsewhere
A lot of times this is set in one of the XML files. It’s where I spent most of my time looking also! In fact, IDK why they didn’t use the XML files in this case. Perhaps there was a limitation or something that needed to be set that the XML alone couldn’t handle (most likely I think now that I look at the code some more)
Anyway, I finally found the missing piece (and probably the source of your confusion)
This file is whats setting the breadcrumbs for your catalog pages. (using the addCrumb function)!!
You can go to it and see exactly how it is doing it - it’s basically bypassing the use of XML (in fact, all the XML layouts are icing on the cake in magento - you could technically not use XML at all, just use PHP functions...)
If you check out app\code\core\Mage\Catalog\Block\Product\view.php you will see one of the first things it does is create the catalog/breadcrumbs block! (in it’s own _prepareLayout function)
so the view.php file is where you are looking for - it is the final piece that shows the breadcrumbs @ product listings
The list php/phtml is actually wrapped inside of view.php/phtml, so the listings pages will all have the breadcrumbs
edit: you are def not the only one who things magneto is very complicated