Добрый день, уважаемые коллеги!
Подскажите пожалуйста, как если не исправить, то хотя бы диагностировать ошибку, возникающую при отладке на Windows Phone 8.
Через несколько секунд после запуска приложения на Nokia Lumia 520 отладчик отключается с сообщением:
The network connection to 127.0.0.1:8016 has been lost. Debugging will be aborted.
В логах при настройке «Debugger Type: Managed Only» последние строчки такие:
...
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{88BE10A2-D68E-CB45-BB67-E691A9969C9A}\Install\UnityScript.Lang.DLL'. Symbols loaded.
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'Anonymously Hosted DynamicMethods Assembly'.
'TaskHost.exe' (CLR C:\windows\system32\coreclr.dll: Silverlight AppDomain): Loaded 'C:\Data\Programs\{88BE10A2-D68E-CB45-BB67-E691A9969C9A}\Install\UnityEngineDelegates.winmd'. Module was built without symbols.
The program '[3168] TaskHost.exe' has exited with code -1 (0xffffffff).
При настройке «Debugger Type: Native Only» чуть подробнее:
...
'TaskHost.exe' (Win32): Loaded '\Device\HarddiskVolume28\programs\{88BE10A2-D68E-CB45-BB67-E691A9969C9A}\NI\UnityEngineDelegates.ni.dll'.
'TaskHost.exe' (Win32): Loaded '\Device\HarddiskVolume28\programs\{88BE10A2-D68E-CB45-BB67-E691A9969C9A}\NI\WinRTLegacy.ni.dll'.
First-chance exception at 0x77611ECF in TaskHost.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x05D6BC80.
First-chance exception at 0x77611ECF in TaskHost.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.
...
First-chance exception at 0x77611ECF in TaskHost.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x05D6BC80.
First-chance exception at 0x77611ECF (KERNELBASE.DLL) in TaskHost.exe: 0xE0434352 (parameters: 0x80131040, 0x00000000, 0x00000000, 0x00000000, 0x713A0000).
First-chance exception at 0x77611ECF in TaskHost.exe: Microsoft C++ exception: Platform::COMException ^ at memory location 0x05D6F7AC. HRESULT:0x80131040
Гугление подобного HRESULT'а связывает его со сообщением «The located assembly's manifest definition does not match the assembly reference.»
Перехватить исключение в UnhandledException не могу.
Какие шаги в принципе можно предпринять, чтобы продолжить исследование проблемы? Как получить более подробную диагностику?
Окружение:
Windows Pro 8.1
Microsoft Visual Studio Express 2012 for Windows Phone (в составе Windows Phone SDK 8.0)
Буду очень признателен за любые советы и предложения!
Здравствуйте, Sharov, Вы писали:
S>К сожалению навряд ли смогу помочь, но взгляд зацепился за Microsoft Visual Studio Express 2012.
Эта версия шла в поставке с Windows Phone SDK 8.0. Я не находил отдельно `Microsoft Visual Studio Express
2013 for Windows Phone`.
S>Мож какую-нибудь другую студию поуверенней попробовать.
У компании нет лицензии на старшие редакции Visual Studio. Разработка ведётся не в Visual Studio, а в MonoDevelop и Unity, в основном на OS X. Проект для WP8 генерится автоматически, и для его сборки достаточно только Windows Phone SDK 8.0 (а с ней поставляется `Microsoft Visual Studio
Express 2012 for Windows Phone`).
Если я подключу UnityPlayer.pdb, мне становятся доступными символы в колл-стэке:
KERNELBASE.DLL!RaiseException() Unknown
Msvcr110.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 152 C++
Vccorlib110.dll!__abi_WinRTraiseCOMException(long hr) Line 502 C++
UnityPlayer.dll!ScriptingTypeProvider_Metro::NativeTypeFor(const char * namespaze, const char * name) Line 29 C++
UnityPlayer.dll!ScriptingTypeRegistry::GetType(const char * namespaze, const char * name) Line 19 C++
UnityPlayer.dll!MonoScript::RebuildFromAwake() Line 149 C++
UnityPlayer.dll!PersistentManager::LoadFileCompletelyThreaded(const std::basic_string<char,std::char_traits<char>,stl_allocator<char,51,4> > & pathname, int * fileIDs, int * instanceIDs, int size, bool loadScene, LoadProgress * loadProgress) Line 1452 C++
UnityPlayer.dll!PreloadLevelOperation::Perform() Line 652 C++
UnityPlayer.dll!PreloadManager::Run() Line 235 C++
UnityPlayer.dll!PreloadManager::Run(void * managerPtr) Line 187 C++
UnityPlayer.dll!Thread::RunThreadWrapper(void * ptr) Line 44 C++
UnityPlayer.dll!<lambda_14163fd8e7b3473ba35abd0bcfa8d126>::operator()(Windows::Foundation::IAsyncAction ^ __formal) Line 273 C++
UnityPlayer.dll!Windows::System::Threading::WorkItemHandler::[Windows::System::Threading::WorkItemHandler::__abi_IDelegate]::__abi_Windows_System_Threading_WorkItemHandler___abi_IDelegate____abi_Invoke(Windows::Foundation::IAsyncAction ^ __param0) C++
THREADPOOLWINRT.DLL!Windows::System::Threading::CThreadPoolWorkItem::CommonWorkCallback(void) Unknown
THREADPOOLWINRT.DLL!Windows::System::Threading::CThreadPoolWorkItem::TimeSlicedCallback(void *) Unknown
NTDLL.DLL!RtlUserThreadStart() Unknown
Есть ли способы понять (при отсутствии исходников указанной нативной библиотеки), с какими параметрами вызывались выделенные методы?
На формуму Unity
подсказали, что проблема в несовпадении версий одноимённых сборок под разные платформы стороннего плагина. Такая проблема должна быть явной и понятной, а не скрытной и молчаливой, о чём и написал разработчикам Unity в багтрекер.