There are some differences between eh_frame and debug_frame formats that are not considered by DWARFCallFrameInfo::GetFDEIndex.
An FDE entry contains CIE_pointer in debug_frame in same place as cie_id in eh_frame. As described in dwarf standard (section 6.4.1), CIE_pointer is an "offset into the .debug_frame section". So, variable cie_offset should be equal cie_id for debug_frame.
FDE entries with zeroth CIE pointer (which is actually placed in cie_id variable) shouldn't be ignored also.
I had same issue as described here, and these changes have fixed it for me (with "m_is_eh_frame" set to false, of course).
I have also added a little change which allow to use debug_info section when eh_frame is absent. This case really can take place on some platforms.
Unprintable character? Same thing two lines below.