Parent with Automatic Weights fails, how to detect which bone?
Here's the solution I come across, this might work for others so I'm posting here.

So you failed the automatic weighting and you have no idea where the problem might be. So what's the solution?
Well, it's to go around looking for real close or overlapping vertices all over your mesh. (I assume you tried normal fixing or merging by distance already)
It is not a pleasant thought if your mesh is complex.

So select all your mesh in edit mode, Select all vertices(or better the ones youre suspicious about) then keep applying Merge By Distance while increasing the Merge Distance value, then apply the auto-weight until it works.

Example
My Merge Distance was: 0.00001 by default.
I increased it to 0.00011 then applied and re-auto-weighted. Didn't work.
So I increased it to 0.00012.
Keep going.  

I found my mark at 0.00022m.  

Use this method at your own risk, there's always the off hand chance of your CPU going critical and causing a thermonuclear reaction in which half a continent can vaporize in the blink of an eye.