调试此JavaScript错误的下一步是什么?

时间:2015-07-10 23:40:54

标签: javascript google-maps google-chrome google-maps-api-3

我从Chrome Development Tool: [VM] file from javascript了解到,Google Chrome中[VM]文件中执行的代码是与文件没有直接关联的代码。

一位客户最近报告说,地理编码功能已不再在其网站上运行。它是一个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,但我已经知道了。

我很确定Google地理编码器工作得很好。令我沮丧的是,我反复点击“Map my Address”按钮足以引起一个单独的Geocode was not successful for the following reason: OVER_QUERY_LIMIT错误,我基于这个错误。

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

1 个答案:

答案 0 :(得分:0)

我会从代码按预期工作的最后一点看代码和环境中的变化增量。

是否有任何包含的库更改了修订版?它们仍然是从相同的来源下载的吗?是否有新添加的JS代码可能会影响现有脚本?

如果这不起作用,我会创建一个只包含可疑基本元素的虚拟页面,并查看错误是否被重现。通过node-debug将此虚拟代码作为节点应用程序运行,并使用Chrome开发工具逐步执行代码也可能会有所帮助。

祝你好运,让我们知道你是如何解决这个问题的(我相信你会的!)