2017-06-11 1 views
10

J'ai créé l'application Xamarin Forms. J'utilise multidex pour Android (nombreuses bibliothèques). J'utilise le fichier multidex.keep avec l'option MultiDexMainDexList. Maintenant, le déploiement est le travail. Mais je me exception en mode débogage:Xamarin Android avec multidex - bug en mode débogage

System.ArgumentException: The offset and length have exceeded the bounds of the array or the counter value exceeds the number of elements from the pointer to the end of the original collection. 
в System.Buffer.BlockCopy(Array src, Int32 srcOffset, Array dst, Int32 dstOffset, Int32 count) 
в Mono.Cecil.Metadata.GuidHeap.Read(UInt32 index) 
в Mono.Cecil.MetadataReader.InitializeCustomDebugInformations() 
в Mono.Cecil.MetadataReader.GetCustomDebugInformation(ICustomDebugInformationProvider provider) 
в Mono.Cecil.Cil.PortablePdbReader.Read(MethodDefinition method) 
в Mono.Cecil.Cil.CodeReader.ReadMethodBody() 
в Mono.Cecil.Cil.CodeReader.ReadMethodBody(MethodDefinition method) 
в Mono.Cecil.MethodDefinition.<>c.<get_Body>b__41_0(MethodDefinition method, MetadataReader reader) 
в Mono.Cecil.ModuleDefinition.Read[TItem,TRet](TRet& variable, TItem item, Func`3 read) 
в Mono.Cecil.MethodDefinition.get_Body() 
Mono.Cecil.MethodDefinition.get_DebugInformation() 
в Mono.Debugging.Soft.SoftDebuggerSession.LoadPdbType(TypeDefinition type, Dictionary`2 fileToSourceFileInfos) 
в Mono.Debugging.Soft.SoftDebuggerSession.LoadPdbFile(String assemblyFileName, String pdbFileName) 
в Mono.Debugging.Soft.SoftDebuggerSession.LoadDebugFile(String assemblyFileName, String debugFileName, Func`3 loadDebugFile) 
в Mono.Debugging.Soft.SoftDebuggerSession.CheckBetterMatch(TypeMirror type, String file, Int32 line, Int32 column, Location found) 
в Mono.Debugging.Soft.SoftDebuggerSession.FindLocationByMethod(MethodMirror method, String file, Int32 line, Int32 column, Boolean& insideTypeRange) 
в Mono.Debugging.Soft.SoftDebuggerSession.FindLocationByType(TypeMirror type, String file, Int32 line, Int32 column, Boolean& genericMethod, Boolean& insideTypeRange) 
в Mono.Debugging.Soft.SoftDebuggerSession.ResolveBreakpoints(TypeMirror type) 
в Mono.Debugging.Soft.SoftDebuggerSession.HandleTypeLoadEvents(TypeLoadEvent[] events) 
в Mono.Debugging.Soft.SoftDebuggerSession.HandleEventSet(EventSet es) 
в Mono.Debugging.Soft.SoftDebuggerSession.EventHandler() 

Pour une analyse que j'utilise - dex2jar et Java Decompiler (par ce article). Mais maintenant je ne sais pas quoi chercher et quels sont les problèmes.

Des idées?

+0

Cela se passe donc dans une configuration 'Debug'. L'exception ci-dessus ressemble plus à un problème de connexion au débogueur doux. Comme il n'y a aucune trace d'une tâche Multidex dans la trace ci-dessus, j'hésite à dire que c'est lié à Multidex jusqu'à ce que nous ayons une reproduction minimale. Pouvez-vous en ajouter un à votre message? –

+0

Bonjour, Jon. Mon débogueur fonctionne maintenant! C'était un problème avec mon projet. J'ai XF 2.3.4.247 dans mon projet. J'ai installé XF 2.3.5.239 (pré), puis l'ai supprimé et installé la version stable 2.3.4.247. Et après que le débogage a fonctionné. Merci pour votre blog - c'est une information très utile. J'attends votre livre sur Xamarin Android. – FetFrumos

Répondre

0

J'ai résolu ce problème.

Ceci est décrit en détail mon cas utilisateur:

  1. je bibliothèque PCL.
  2. J'ai besoin de mettre à jour Azure Mobile Client vers la version 4.0. Cette version n'est pas compatible avec PCL .NET Standard. 1.4.
  3. Mais j'ai un projet Windows Phone avec Xamarin Forms. WP non supporté .Net Standard 1.4
  4. J'ajoute une nouvelle librairie dans ma solution (.NET Standard 1.4). J'ai ajouté des fichiers à cette bibliothèque à partir de mon PCL en tant que lien.
  5. Ensuite, il y avait cette erreur. Au début, c'était un bug flottant - mais alors c'était permanent.
  6. J'ai passé deux jours ouvrables complets à chercher la cause de cette erreur. J'ai trouvé un endroit où l'application tombait.
  7. J'ai supprimé le fichier associé de ma bibliothèque (Standard .Net), puis l'ai ajouté. Maintenant, le débogage fonctionne.