none
Visual Studio no cacha crash con listView (WinJS) RRS feed

  • Pregunta

  • Estoy inicializando un listView con el siguiente código:

               

    (function () {
        "use strict";
        var participantCompanies = new Array;

        WinJS.UI.Pages.define("/pages/clinicalAnalyzes/participatingCompanies.html", {
            // Se llama a esta función cuando un usuario navega a esta página. Esta
            // rellena los elementos de la página con los datos de la aplicación.
            ready: function (element, options) {
                // TODO: Inicializar la página aquí.
                clinicalAnalyzesVars.companyTypeId = 1;
                var description = "";
                productsVars.ProductByEditionInfoItems = null;
                Orientation.onChange();

                getCompanies(); //Obtiene las compañias y las asigna a la variable participantCompanies

    //y esa información es la que se envia en displayCompanies

    ...

    function displayCompanies(companies) { console.log("display companies", companies); if (companies != null && companies != 'undefined') { document.body.querySelector('#companiesList').style.display = "none"; var companiesList = new WinJS.Binding.List(companies); //Se asocia la lista de elementos que desplegaremos a una enlazada con el control ListView var list2 = document.getElementById("participatingCompanies").winControl; //Lista a la que hacemos referencia list2.itemDataSource = companiesList.dataSource; //Objetos que serviran de fuente para llenar la lista list2.oniteminvoked = getCompanyDetail; //Llama a la funcion fnNavigate cuando se selecciona un elemento } else { document.body.querySelector('#companiesList').style.display = "block"; } Loader.hide(); }



            <div class="participatingCompanies" data-win-control="WinJS.Binding.Template">
                <div class="templ">
                    <p class="textList" data-win-bind="innerText: CompanyName"></p>
                    <div class="list-item-arrow"><i></i></div>
                </div>
            </div>
            <div id="participatingCompanies" class="listBox" data-win-control="WinJS.UI.ListView" data-win-options="{
    		    	selectionMode: 'single', itemTemplate: select('.participatingCompanies'), layout: { type: WinJS.UI.ListLayout }}"></div>

    Al momento de correr la aplicación en un teléfono Nokia Lumia 1320 con Windows 10.0.10.586.11.

    La aplicación crashea en el telefono cuando entro a la lista, le hago scroll de arriba a abajo, salgo y vuelvo a repetirlo.

    Esta es la salida de la consola al crashear la aplicación:

    'WWAHost.exe' (Script): 'Código de script (MSAppHost/3.0)' cargado. 
    El programa '[1084] WWAHost.exe' terminó con código -1073741819 (0xc0000005) 'Access violation'.

    Pregunta 1: ¿Cómo puedo asegurarme de que visual studio cache la excepción antes del crash?

    Pregunta 2: ¿Es posible que tenga un memory leak usando el control del listView?


    • Editado angelmax miércoles, 2 de diciembre de 2015 23:29
    miércoles, 2 de diciembre de 2015 23:11

Respuestas

  • Hola,

    Primero que nada quiero comentarte que tu código debería funcionar correctamente.

    Segundo, analizando tu caso pude encontrar el crash:

    FAILURE_ID_HASH_STRING:  um:null_class_ptr_read_c0000005_qcdx9um8930.dll!unknown
    FAILURE_ID_HASH:  {cbd8757e-a1b3-7dbb-ba20-6fdaace834dc}
    FAILURE_ID_REPORT_LINK: http://go.microsoft.com/fwlink/?LinkID=397724&FailureHash=cbd8757e-a1b3-7dbb-ba20-6fdaace834dc
    Followup:     stibb;jongriff;dimplea (Feature path: "CORE-OS Core\SiGMa-Silicon, Graphics and Media\CaFE-Camera and First-Party Engineering\MPE-Mobile Platform Engineering\Qualcomm\")

    Esto indica que el crash no tiene que ver con tu código. Realmente es un crash que ocurre al manejar los gráficos.

    Es decir, la acción de desplazar el listview está desencadenando un crash, pero este crash no es de tu aplicación es un crash a nivel del driver de video del sistema operativo. 

    Por lo tanto, respondiendo tus preguntas:

    Pregunta 1: ¿Cómo puedo asegurarme de que visual studio cache la excepción antes del crash?

    Visual Studio nunca va a cachar esta excepción porque no es un crash de tu aplicación, es un nivel más abajo y estas excepciones se cachan únicamente en el sistema operativo.

    Pregunta 2: ¿Es posible que tenga un memory leak usando el control del listView?

    Los memory leaks siempre son probables, incluso con un control de listView (por ejemplo, una iteración interminable de asignación de listviews a un número interminable de variables que nunca son llamadas). Sin embargo, en tu caso eso no está pasando.

    Para concluir, el problema se debe a la configuración que estás usando. Específicamente ese dispositivo con ese build del sistema operativo está causando el problema. Lo más sencillo es que utilices un dispositivo más actual y mantengas actualizado el dispositivo con las versiones estables del sistema operativo. Tu código funcionará correctamente en el grueso de la población.

    Bruno Medina | MS Tech Evangelist

    • Marcado como respuesta angelmax martes, 5 de enero de 2016 22:05
    martes, 5 de enero de 2016 21:56