Странная трассировка стека на Windows Phone 8

У меня есть приложение в магазине Windows Phone, и из отчетов я вижу пару сбоев со следующей трассировкой стека:

Problem function
MyApp.InputPage+_populateLocationList_d__0.MoveNext

Exception type
system.nullreferenceexception

Stack trace
"Frame    Image          Function                                                                   Offset        
0        myapp_ni       MyApp.InputPage+_populateLocationList_d__0.MoveNext    0x00000050    
1        mscorlib_ni    System.Runtime.CompilerServices.AsyncMethodBuilderCore._ThrowAsync_b__0    0x00000036"

Да, я знаю, что проблема в методе InputPage populateLocationList, но этот метод довольно сложный. Есть идеи, что может вызвать это? Как отладить это, так как я не могу воспроизвести ошибку сам.

И это мой список populateLocationList:

private async void populateLocationList(object sender, EventArgs e)
{
    String searchString = this.locationTextBox.Text;

    var geoCodesList = new List<GeocodeResponse>();

    if (searchString.Length >= 3)
    {
        WebApiWorker webApi = new WebApiWorker();
        geoCodesList = await webApi.GetGeocodeAsync(searchString);
    }

    if (geoCodesList == null || geoCodesList.Count < 1)
    {
        noLocationsFoundText.Visibility = Visibility.Visible;
    }

    else
    {
        noLocationsFoundText.Visibility = Visibility.Collapsed;
    }

    this.routeLocationsList.ItemsSource = geoCodesList;
}

1 ответ

Если исключить ошибку в механизме async-await (которая имеет малую, но ненулевую возможность), в вашем методе есть четыре места, которые могут привести к исключению NullReferenceException:

  • locationTextBox.Text
  • searchString.Length
  • noLocationsFoundText.Visibility
  • routeLocationsList.ItemsSource

Вы уверены, что ни один из них не является нулевым? В зависимости от того, как асинхронная среда обрабатывает сообщения об ошибках, я также не исключаю, что что-то будет взорвано await GetGeocodeAsyncхотя трассировка стека говорит об обратном.

Кстати, почему вы инициализируете List<GeocodeResponse> и сразу же перезаписать это? Это не проблема, но выглядит излишним.

Чтобы помочь вам в отладке, @devha предполагает, что вы можете отключить отладчик, как только выдается конкретное исключение. В меню "Отладка" выберите "Исключения", а в разделе "Исключения CLR" проверьте исключение NullReferenceException. Теперь, когда каждый из них выдается во время отладки, Visual Studio немедленно приостанавливает работу и отображает строку с ошибкой.

Другие вопросы по тегам