js調試系列: 源碼定位與調試[基礎篇]

來源:互聯網
上載者:User

標籤:style   class   blog   code   java   http   

js調試系列目錄:-

    如果看了1, 2兩篇,你對控制台應該有一個初步瞭解了,今天我們來個簡單的調試。
    昨天留的三個課後練習,差不多就是今天要講的內容。
    我們先來處理第一個問題:1. 查看文章下方 推薦 這個功能所調用的函數源碼
    其實非常簡單,點放大鏡選中那個推薦即可。

    這個  votePost(cb_entryId,‘Digg‘)  就是推薦按鈕所調用的函數了,是不是非常簡單。

    第二個問題,定位到函數所在檔案位置。
    其實也是非常簡單的,當然,不熟悉控制台的朋友也許不知道怎麼看。
    我在控制台輸入 votePost 然後斷行符號,

    函數源碼粗顯啦,並且在右下角有個連結 blog-common.js?v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1:1 這個是什麼意思呢?
    後面的 v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1 直接忽略好了。

    ps: 如果想知道這個是什麼東西,其實就是個版本號碼,至於什麼作用,往往是防止緩衝的,具體自己上網搜尋吧。
    blog-common.js:1 差不多就是這個意思。。
    blog-common.js 是這個函數所在的js檔案
    1 是代碼所在的行號。

    直接點擊這個連結,就可以跳轉到 Sources 面板,這個就是源碼面板,調試最重要的一個功能,之後會慢慢介紹。

    可是所有代碼都在一行,我們改怎麼看? 4946 個字元呢,全縮在一行上。。
    chrome 給我們提供了一個代碼格式化的功能,點擊下方那個 Pretty print 按鈕即可格式化代碼。

    格式化完畢之後就是非常美觀的代碼了,至於看不看的懂,那是另一回事了。
    有的看不懂可能是代碼被UglifyJS,Google‘s Closure之類的工具編譯過,如 jquery.min.js 檔案。
    還有可能是水平太次了,暫時看不懂大神寫的代碼,那我也無能為力,你只能自己加油了努力提升實力了。
    如果格式化夠找不到函數所在位置,也不要著急,有我在,慌啥?
    回到剛才控制檯面板。

    你欣喜的發現,blog-common.js?v=WE8o1xrgcTu07QVvwYqERqD7AA8fdJp_dgoE-crAT3k1:91
    行號變成 91 了,現在再點擊這個連結,就可以跳轉到對應格式化後的位置了,是不是超方便。。

    最後一個問題,修改函數使其無效,這個最簡單了,比剛才的簡單多了,可是很多人不會操作所以我特地拿出來講一下。
    首先,我們知道了 推薦 這個功能調用的函數是  votePost(cb_entryId,‘Digg‘) ,而且他是直接寫是 html 上通過 onclick 綁定的。
    所以這個函數是一個全域函數,到處都可以調用,那這意味著什麼呢?
    意味著我們可以修改啊,好比一個全域變數,你在哪都能修改對吧,那全域函數也是應該道理。
    所以我們直接修改為空白函數即可。
     votePost = function () {};  或者  votePost = $.noop;  都可以。$.noop 是 jQuery 為我們提供的空函數,方便我們使用。


    現在 votePost 就是一個空函數,所以你點擊 推薦 按鈕是不會發生任何事情的。
    當然重新整理頁面後會重新生效,我們只是在頁面上調試修改而已,沒有去改部落格園的源碼,是不可能永久生效的。
    所以調試的意思就是尋找與排除錯誤的過程,如果定位到錯誤源了,修改下然後測試,如果不對,重新整理後重新修改,這樣就不必修改實際檔案而導致不可恢複了。

    今天的內容差不多就這些了,其實現在很少有直接全域函數給你調試的,因為現在 jQuery 風靡,各種 click, on 之類的事件綁定,導致源碼定位非常繁瑣。
    好在我之前寫了一篇,比較詳細的分析了這個問題,詳情請參閱《淺談 jQuery 事件來源碼定位問題》
    其他架構我也不熟,所以沒分析,不過思路其實是差不多的,必然都會有一個事件管理機制。

    今天知識點不多,但是要自己動手鞏固下,不然會秒忘的。

    課後練習:
    1. 分析 votePost 函數是如何? 推薦 的。
    2. 動態調試分析 votePost。(要結合斷點知識)

    明天要講斷點與動態調試,我也沒找到合適的題目,就先湊合著做吧,如果你有合適的東西需要動態調試的,請跟帖。。

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.