visual studio start remove microsoft bar appcenter app c# android xamarin mono xamarin.android

c# - studio - App Crash al instante sin excepción o registro(parece un error xamarin/mono)



visual studio app center (4)

Es una situación extraña aquí :), he implementado este código en mi fragmento para escanear TCP Ports en un multithread environment , se crash when debugging y, a veces crash in release mode también se cuelga crash in release mode con estos mensajes:

E/art (12972): Nested signal detected - original signal being reported

F/art (12972): art/runtime/fault_handler.cc:117] Check failed: !initialized_

Intentó configurar Target Android to 23 que no funcionó.

intentado ejecutar adb shell setprop debug.mono.env MONO_DEBUG=soft-breakpoints que no funcionaron.

intentado compilar usando diferentes Android API''s Versions

CUALQUIER IDEA ¿POR QUÉ ESTÁ SUCEDIENDO?

AQUÍ ES MI CÓDIGO:

public void start() { for (int i = 0; i < 50; i++) { Task.Run(() => RunScanTcp()); //ThreadPool.QueueUserWorkItem(RunScanTcp); //Thread thread = new Thread(new ThreadStart(RunScanTcp)); //thread.Start(); } } public void RunScanTcp() { while (abort != true) { port = port + 1; Log.Info("PORT SCANNER", port.ToString()); } } public class PortList { private int start; private int stop; private int ports; private static readonly object _syncRoot = new object(); public PortList(int starts, int stops) { start = starts; stop = stops; ports = start; } public bool MorePorts() { lock (_syncRoot) { return (stop - ports) >= 0; } } public int NextPort() { lock (_syncRoot) { if (MorePorts()) { return ports++; } return -1; } } }

Estoy compilando usando:

Android Version (Android 7.1 Nougat)

Versión mínima de Android:

Android 4.1 (API Level 16 - Jelly Bean)

Target versión de Android:

Compile Using SDK Version

ACTUALIZAR:

Después de Visual Studio Update 15.2 (26430.12) y Xamarin 4.5.0.476 - 30/05/2017 (dd / mm / aaaa), la aplicación se crashed mientras estaba connected to debugger también ...

Aquí está la salida del depurador:

referenceTable GDEF length=814 1 referenceTable GSUB length=11364 1 referenceTable GPOS length=47302 1 referenceTable head length=54 1 referenceTable GDEF length=428 1 referenceTable GSUB length=2302 1 referenceTable GPOS length=43252 1 referenceTable head length=54 1 referenceTable GDEF length=808 1 referenceTable GSUB length=11364 1 referenceTable GPOS length=49128 1 referenceTable head length=54 1 referenceTable GDEF length=808 1 referenceTable GSUB length=11364 1 referenceTable GPOS length=47320 1 referenceTable head length=54 1 05-31 04:31:51.590 F/art (17427): art/runtime/fault_handler.cc:117] Check failed: !initialized_

Gracias a todos ...



Así que me encontré con un problema así con Xamarin y VS. resulta que no todos los errores se registran en la consola de depuración de VS, pero están en el registro del dispositivo. Lo que tenía que hacer esa vez era ir y usar el emulador en mi máquina y ejecutarlo mientras el dispositivo iniciaba sesión. y detuvo el registro justo después del bloqueo. En ese registro estaba claro cuál era el problema (que en mi caso era un permiso mal configurado). Espero que ayude.


Como describió, funciona sin esa parte del código ... por lo que el error debe estar en algún lugar de su código.

Echemos un vistazo.

public void start() { for (int i = 0; i < 50; i++) { Task.Run(() => RunScanTcp()); } } public void RunScanTcp() { while (abort != true) { port = port + 1; Log.Info("PORT SCANNER", port.ToString()); } }

En el método de start , inicia 50 tareas, y no await ninguna, lo que significa que posiblemente todas las tareas se ejecutan en paralelo (al menos definitivamente algunas tareas intentan acceder al port al mismo tiempo).

Lo que esas tareas ejecutan es un método que accede al port que debe ser un campo de la clase contenedora.

El acceso a un campo compartido desde múltiples tareas / hilos nunca es una buena idea sin un bloqueo.

Intenta usar el siguiente código (si realmente necesitas las tareas paralelas por algún motivo).

public class YourClass { private bool abort; private int port; private object portLock = new object(); public void start() { for (int i = 0; i < 50; i++) { Task.Run(() => RunScanTcp()); } } public void RunScanTcp() { while (abort != true && this.port < int.MaxValue) { lock (this.portLock) { port = port + 1; Log.Info("PORT SCANNER", port.ToString()); } } } }

Posiblemente un mejor enfoque es usar solo una tarea y en algún lugar await .

public class YourClass { private bool abort; private int port; private object portLock = new object(); public Task start() { return Task.Run(() => RunScanTcp()); } public void RunScanTcp() { lock (this.portLock) { while (abort != true && this.port < int.MaxValue) { port = port + 1; Log.Info("PORT SCANNER", port.ToString()); } } } }

Si eso resuelve su problema actual, puede agregar otra pregunta sobre cómo resolver correctamente lo que realmente está tratando de resolver (ya que su código actual simplemente incrementa el port hasta que se interrumpe o la aplicación falla (ya que contó arriba del Int32 MaxValue)


El problema parece estar en la xamarin.android platform porque después de la última actualización 6/9/2017 Visual Studio 2017 version 15.2 (26430.13) ya no se Visual Studio 2017 version 15.2 (26430.13) ... de todas formas gracias por su tiempo ... Este error ocurre cuando se intenta crear (n ) número de hilos / tarea ...