调试F#数据提供程序问题

时间:2014-03-22 19:55:52

标签: debugging f# nullreferenceexception freebase f#-data

我正在尝试从F#中的freebase提供程序中提取一个位置,我终于让它工作了。我想填写一个自定义类“Place”(来自C#)库。在我出错之前一切正常:

System.NullReferenceException: Object reference not set to an instance of an object.

此行发生此错误:

 tempAddress.Address <- firstPlace.``Street address``.``Street Address`` |> Seq.head

所以我想调试它,看看出了什么问题。我已将所有内容都置于调试模式,即优化代码复选框,未经检查。我做了一个干净的重建解决方案。调试中的一切。我在那一行放了一个断点,令我惊讶的是,我看不到任何本地人,变数,什么都没有。只是断点停止了!这是我正在使用的代码:

 let Extract mid = let dataWithKey = FreebaseDataWithKey.GetDataContext()
                  let place = dataWithKey.Commons.Travel.``Travel destinations``.Where( fun x-> x.MachineId = mid) |> Seq.toList                           
                  let result = new Place()   
                  let firstPlace = place.Head                                    

                  result.Name <- firstPlace.Name

                  let tempAddress = new FBAddress()
                  tempAddress.Address <- firstPlace.``Street address``.``Street Address`` |> Seq.head

                  result

调试时我只在Locals窗口看到这个

        mid Cannot obtain value of local or argument 'mid' as it is not available at this instruction pointer, possibly because it has been optimized away. string

但是,我再次调试了一切。例如,我可以调试普通的C#代码,这只发生在F#项目中。

有没有办法让VS2013向我展示当地人?或者在我的手表上发现我的任何东西?谢谢!

编辑我用另一个代码安静进行了一点测试,一个人检查一个单词是否是回文,我能够调试,进入代码,并观察本地和变量。就在我下载FSharp.Data的nuget包并开始编码时,它正确地进行了调试。我看到当调用此行时,本地人会消失:

let place = dataWithKey.Commons.Travel.``Travel destinations``.Where( fun x-> x.MachineId = mid) |> Seq.toList  

在此之前,我能够看到“mid”变量内容

1 个答案:

答案 0 :(得分:1)

对于已擦除类型的提供程序,您看到的代码与在运行时实际执行的代码非常不同,因此有时调试器会遇到一些问题。 Freebase甚至更糟糕,因为有很多IQueryable转换正在进行中。您是否尝试在“调试器”部分的VS选项中检查“启用源服务器支持”,并尝试单步执行FSharp.Data源代码?