Странная трассировка стека на 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 немедленно приостанавливает работу и отображает строку с ошибкой.