2015-07-10 43 views
-1

我从Chrome Development Tool: [VM] file from javascript明白,一个[VM]文件在谷歌浏览器内执行的代码是不直接依赖于文件中的代码。调试此JavaScript错误的下一步是什么?

客户端近日报道,地理编码功能不再工作在他们的网站。这是一个Joomla网站,所以它使用MooTools。地理编码通过Google Maps API v3完成。我多年前就写了代码,最近才开始行动起来。我确定了代码中发生错误的确切位置,但是堆栈跟踪的末尾会在[VM]混淆的文件之一中结束。

如果错误在我的代码作物起来:

var pf_map = { 
    geocoder: new google.maps.Geocoder(), 

    geocode: function() { 
     var address = '123 Fake St, Nowhere, USA'; // actually a valid address 

     // The error occurs somewhere between here 
     console.log('This message makes it to the console'); 
     pf_map.geocoder.geocode({ 'address': address }, function(results, status) { 
      // and here 
      console.log('This message does not make it to the console'); 
     }); 
    } 
} 

是在控制台报告的错误是:

Uncaught TypeError: Cannot read property 'charAt' of undefined 

堆栈跟踪看起来是这样的:

console stack trace

它看起来像我MooTools造成的问题,但我不知道如何调试。点击该堆栈的顶部,我得到这样的:

easy-to-read JavaScript

非常愉快。我已经通过脚本台阶,这是范围的外观时抛出的错误,如:

scope during the error

好吧,我可以看到b确实undefined,但我已经知道了。

我敢肯定的是,谷歌地理编码工作就好了。在我的沮丧中,我反复点击了“Map my Address”按钮,导致单独的Geocode was not successful for the following reason: OVER_QUERY_LIMIT错误,我在此基础上做出了特定假设。

接下来你会在这种情况下尝试什么?

+0

我会尝试寻找到你的未定义的变量应该他们为什么没有定义加以界定和确定和然后定义它们。这显然是你和堆栈跟踪指出的问题。 –

+1

[code as posted(jsfiddle)](http://jsfiddle.net/geocodezip/c4bpqfas/)适合我。这是代码之外的东西。请发布证明此问题的[最小,完整,测试和可读示例](http://stackoverflow.com/help/mcve)。如果您真的认为地理编码器返回的状态可能是错误的(例如OVER_QUERY_LIMIT),那么您应该检查它。 – geocodezip

回答

0

我想看看变化的增量,无论是在代码和环境,从最后一点时,代码是按预期工作。

没有任何包含的库的变化修订?他们是否仍然从相同的来源下载?是否有新添加的JS代码可能会影响现有的脚本?

如果不行,我会创建只是可疑的基本要素的虚拟页面,看看错误被复制。通过node-debug将这个虚拟代码作为节点应用运行,并使用Chrome开发工具逐步执行代码也可能会有所帮助。

祝你好运,让我们知道你是怎么解决这个(我敢肯定,你会的!)

+0

不幸的是,这是一个FTP服务器上的Joomla网站。它甚至没有版本控制。这将会改变(至少对我个人而言)。我无法在Plunkr中重现这个问题,所以在直觉上我开始搞乱脚本加载顺序。果然,将Google地图移到列表的末尾,MooTools移到顶端,所有事情都开始重新开始。我不知道如何改变,但它确实如此。 –