Windows Phone 8上的奇怪堆栈跟踪

时间:2013-11-18 21:06:45

标签: c# windows-phone-8 stack-trace

我在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 个答案:

答案 0 :(得分:0)

除非async-await机器中存在一个错误(这是一个非常小但非零的可能性),你的方法中有四个位置可能会导致NullReferenceException:

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

你确定这些都不是空的吗?根据异步框架处理错误报告的方式,我也不排除在await GetGeocodeAsync中出现的问题,尽管堆栈跟踪建议不然。

顺便说一下,为什么要初始化List<GeocodeResponse>并立即覆盖它?这不是问题,但看起来多余。

为了帮助您进行调试,正如@devha建议您可以在调用特定异常时将调试器设置为中断。在&#39; Debug&#39;菜单,选择&#39;异常&#39;,然后在CLR异常下检查NullReferenceException。现在,只要在调试时抛出其中一个,Visual Studio就会立即暂停并向您显示有问题的行。