Symbol files are now available for improved diagnosis of issues when working with ArcGIS Runtime SDK for .NET.
Symbol files, or program database files (.pdb), link instructions in compiled applications and libraries to statements in the original source code. They enable you to access a more informative call stack if that application or library fails. Call stacks are valuable because they enable us to:
If your WPF or UWP application crashes and the call stack points to the ArcGIS Runtime libraries, you can use either of the two workflows outlined below to provide Esri with more specific information and help us to more swiftly identify the cause of issue.
When debugging and working with symbol files you will see a distinction made between managed and native libraries ("modules"). Managed modules contain code whose execution is managed by the .NET Common Language Runtime. Native modules contain code whose execution is controlled by the developer of that library and as such is often referred to as unmanaged code.
The UWP and WPF APIs within ArcGIS Runtime SDK for .NET each comprise one managed and two native libraries:
For more information see Specify symbol (.pdb) and source files in the Visual Studio debugger in the Microsoft documentation.
Follow these steps if you can reproduce the problem when running your application with the debugger attached.
For more information see How to use the threads window in the Visual Studio documentation.
For more information see Enable mixed mode debugging in the Microsoft documentation.
For more information see How to use the threads window in the Visual Studio documentation.
For more information see How to use the threads window in the Visual Studio documentation.
If you have copied the text for an ArcGIS Runtime related call stack you can add this information to a Geonet post or provide it to an Esri analyst when you contact Support to report your issue.
The following example shows the type of ArcGIS Runtime call stack you might have in the event of an crash and shows how you might read a call stack to decipher potential causes of the problem and perhaps find a temporary workaround.
In July 2019 an ArcGIS Runtime user reported on GeoNet a crash with 100.5 when their code called the asynchronous method RouteTask.SolveRouteAsync(). They did the best thing you can do in this situation by attaching a simple standalone reproducer application to the Geonet post. It enabled the development team to repeat the exact workflow and get the call stack using the 100.5 symbol files. The call stack showed that ArcGIS Runtime code was failing within geometry spatial reference handling, which allowed us to recommend a straightforward workaround: specify the SpatialReference when creating MapPoint geometries to represent Stops. Now with 100.6, you too have access to the symbol files giving you a head start on identifying possible causes and temporary workarounds, and more specific information to share with us when reporting your issue. In this case, thanks to the excellent reproducer application from the user we were able to quickly diagnose and fix this bug for the 100.6 release.
Example call stack:
> runtimecore.dll!Esri_runtimecore::Geometry::Spatial_reference_impl::horizontal_equal_(class Esri_runtimecore::Geometry::Spatial_reference_impl const &) Unknown
runtimecore.dll!Esri_runtimecore::Geometry::Spatial_reference_impl::equals(class Esri_runtimecore::Geometry::Spatial_reference const &) Unknown
runtimecore.dll!Esri_runtimecore::Network_analyst::reproject(class std::shared_ptr<class Esri_runtimecore::Geometry::Geometry> const &,class std::shared_ptr<class Esri_runtimecore::Geometry::Spatial_reference> const &,class std::shared_ptr<class Esri_runtimecore::Geometry::Spatial_reference> const &) Unknown
runtimecore.dll!Esri_runtimecore::Network_analyst::NA_utils::reproject<class Esri_runtimecore::Network_analyst::Stop>(class std::shared_ptr<class Esri_runtimecore::Geometry::Spatial_reference> const &,class std::vector<class Esri_runtimecore::Network_analyst::Stop,class std::allocator<class Esri_runtimecore::Network_analyst::Stop> > &) Unknown
runtimecore.dll!Esri_runtimecore::Network_analyst::Local_route_task::initialize_stops_(class Esri_runtimecore::Network_analyst::Route_parameters const &,class std::vector<class Esri_runtimecore::Network_analyst::Stop,class std::allocator<class Esri_runtimecore::Network_analyst::Stop> > const &,class std::vector<class Esri_runtimecore::Network_analyst::Stop,class std::allocator<class Esri_runtimecore::Network_analyst::Stop> > &,class std::shared_ptr<class Esri_runtimecore::Geodatabase::Transportation_network_view> const &,class std::vector<struct Esri_runtimecore::Network_analyst::Solve_condition,class std::allocator<struct Esri_runtimecore::Network_analyst::Solve_condition> > &,class std::vector<struct Esri_runtimecore::Network_analyst::Solve_condition,class std::allocator<struct Esri_runtimecore::Network_analyst::Solve_condition> > &) Unknown
runtimecore.dll!Esri_runtimecore::Network_analyst::Local_route_task::solve(class Esri_runtimecore::Network_analyst::Route_parameters,class pplx::cancellation_token const &) Unknown
runtimecore.dll!Esri_runtimecore::Mapping::Local_solve_operation::solve_async(class std::shared_ptr<class Esri_runtimecore::Mapping::Request_delegator> const &,class std::shared_ptr<class Esri_runtimecore::Mapping::Route_parameters> const &,class Esri_runtimecore::Mapping::Task_completion_source<class std::shared_ptr<class Esri_runtimecore::Mapping::Route_result> >,class Esri_runtimecore::Mapping::Task_options) Unknown
runtimecore.dll!<lambda_892f625b129cc43ba2b282eeb1ecc18f>::operator()<pplx::task<boost::any>>() Unknown
runtimecore.dll!std::_Func_impl_no_alloc<<lambda_31388138151c3f34bc6c36ef59ef90df>,boost::any,pplx::task<boost::any>>::_Do_call() Unknown
runtimecore.dll!std::_Func_class<class boost::any,class pplx::task<class std::vector<class boost::any,class std::allocator<class boost::any> > > >::operator()(class pplx::task<class std::vector<class boost::any,class std::allocator<class boost::any> > >) Unknown
runtimecore.dll!pplx::details::_PPLTaskHandle<class boost::any,struct pplx::task<class boost::any>::_ContinuationTaskHandle<class boost::any,class boost::any,class std::function<class boost::any >,struct std::integral_constant<bool,1>,struct pplx::details::_TypeSelectorNoAsync>,struct pplx::details::_ContinuationTaskHandleBase>::invoke(void) Unknown
runtimecore.dll!pplx::details::_TaskProcHandle::_RunChoreBridge(void *) Unknown
runtimecore.dll!Esri_runtimecore::Common::Core_scheduler::bridge_proc_(void *) Unknown
runtimecore.dll!Esri_runtimecore::Common::Windows_Threadpool_scheduler::Scheduler_param::work_callback(struct _TP_CALLBACK_INSTANCE *,void *,struct _TP_WORK *) Unknown
ntdll.dll!77597dc4() Unknown
ntdll.dll![Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] Unknown
[External Code]
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.