Home Dashboard Directory Help
Search

Very long symbols get truncated and debug visualizers can't match by stheophil


Status: 

Closed
 as By Design Help for as By Design


2
0
Sign in
to vote
Type: Bug
ID: 776886
Opened: 1/18/2013 2:50:46 AM
Access Restriction: Public
0
Workaround(s)
view
0
User(s) can reproduce this bug

Description

I encounter very long symbol due to expanded typedefs and template magic. The VC compiler does not keep track of original typedefs as clang does and expands them all. The symbols get truncated at some max length like the following example. This makes the symbols illegible and worse, the debug visualizers cannot match anymore. Example:


boost::intrusive::list<
    set_partition_base<boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
        boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
        std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
        std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
        std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
        boost::use_default,boost::use_default>,
        boost::use_default,boost::use_default>,
        
        STargetPosition,
        F2wayFrom3way<fn_compare,boost::algorithm::is_less>,
        set_partition_value_traits<
        boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
        boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
        std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
        std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
        std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
        boost::use_default,boost::use_default>,boost::use_default,boost::use_default> >
    >::part,
    boost::intrusive::member_hook<
        set_partition_base<
            boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
            boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
            std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
            std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
            std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline> > > >,
            boost::use_default,boost::use_default>,boost::use_default,boost::use_default>,
            STargetPosition,
            F2wayFrom3way<fn_compare,boost::algorithm::is_less>,
            set_partition_value_traits<
            boost::transform_iterator<CLayoutSolverT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion>,SDragSpanDescriptor,void *>::FGridlineCast,
            boost::transform_iterator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridlineBuckets::FGetGridline,
            std::_Vector_iterator<std::_Vector_val<std::_Simple_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline>,
            std::_Vec_base_types<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,void *>::SGridline,
            std::allocator<SSolveCollisionsT<SGridlinePayloadT<SSourceGridlineT<CNonHandleDragT<CDragTraits>::TGridlinePayloadUnion> >,SDragSpanDescriptor,v48134b84270b613575081ef18293cc09
Details
Sign in to post a comment.
Posted by stheophil on 2/8/2013 at 1:03 AM
Why did I expect this?

Of course the behavior is not by accident but because you use strings with 16bit size fields or whatever. The problem is that your debugger does not support valid C++ programs.
Posted by Microsoft on 2/7/2013 at 2:51 PM
Hi stheophil,

Thanks for submitting this bug. After careful consideration, we've decided not to fix this bug because our compiler has certain internal limitations on the lengths of symbol names.

Karl Niu
VC++ Team
Posted by Microsoft on 1/21/2013 at 1:01 AM
Thanks for your feedback.

We are rerouting this issue to the appropriate group within the Visual Studio Product Team for triage and resolution. These specialized experts will follow-up with your issue.
Posted by Microsoft on 1/18/2013 at 3:50 AM
Thank you for your feedback, we are currently reviewing the issue you have submitted. If this issue is urgent, please contact support directly(http://support.microsoft.com)
Sign in to post a workaround.