關於cocos2dx程式的BUG調試解決方案

來源:互聯網
上載者:User

      今天說一下手機遊戲開發的調試問題吧。不得不說的是和PC平台遊戲、軟體開發相比,手機上開發遊戲和軟體要困難的多。原因是多方面的,比如說開發環境比較複雜,工具軟體不夠人性化等等。

      cocos2dx的出現解決了一個很大的問題,因為他是跨平台的,相對來說windows的軟體開發環境比較友好,對中國程式員來說更熟悉。這樣可以在windows進行日常開發和調試,然後在發布到其它平台的時候進行少量的處理就好了。

      cocos2dx程式的調試,在windows下和端遊類似,可以在後台視窗進行列印,也可以直接在vs中掛斷點進行跟蹤。相對還是比較容易。唯一需要最佳化的是把後台列印日誌匯出,以方便根據日誌進行分析。

      但是在windows環境OK之後,需要發布到Android平台的時候,就有些麻煩了,順利運行還好,一旦在啟動並執行過程中出現問題,那再來調試就相當的麻煩了,模擬器滿如蝸牛,Esclipe本身支援也不夠強大。有時候可能只是一句指令碼報錯,但是要發現問題缺要費九牛二虎之力。要是在真機上運行出錯,那就更加不好跟蹤問題了,還需要用到USB調試功能。今天的主要話題就是針對這種情況,提供幾個好的方法來方便我們進行遊戲開發。

      1、後台列印日誌的最佳化。

      windows下已經有後台日誌查看功能,但是大家可能會發現一個問題,後台顯示有行數的限制,超過多少行之後就看不到了,但是cocos2dx的輸出是相當多的。怎麼辦?解決方案就是輸出log檔案。把後台顯示的內容輸出後,我們可以直接分析log檔案。下面提供lua的解決代碼,用C++的同學可以自己改造。

      首先,封裝一下lua的檔案處理功能,比較簡單,而且後面的方法可能也需要使用。

--file.lua--定義lua檔案操作的方法--開啟檔案:參數(檔案名稱,開啟模式),返迴文件控制代碼或nilfunction openFile(filename, mode)local f = io.open(filename,mode)if f thenreturn felsereturn nilendend--讀取檔案全部內容:參數(檔案控制代碼),返回一個stringfunction readAllFile(f)return f:read("*all")end--讀取檔案一行內容:參數(檔案控制代碼),返回一個stringfunction readLineFile(f)return f:read("*line")end--寫檔案內容:參數(檔案控制代碼,字串)function writeFile(f, ...)local arg = {...}f:write(unpack(arg))end--關閉檔案,參數(檔案控制代碼()function closeFile(f)f:close()end
      然後,我們要改寫print函數和cclog函數,將這些內容輸出到檔案。

local print_raw = print-- printprint = function(...)    require "base.file"    print_raw(string.format(...))    local file = openFile("client.log", "a")    if file thenwriteFile(file, string.format(...).."\n")closeFile(file)    endend-- cclogcclog = function(...)    print(string.format(...))end-- for CCLuaEngine tracebackfunction __G__TRACKBACK__(msg)    print("----------------------------------------")    print("LUA ERROR: " .. tostring(msg) .. "\n")    print(debug.traceback())    print("----------------------------------------")end
      這樣,所有在lua裡面的列印資訊都會輸出到記錄檔方便我們分析了。

      2、上面這個方法已經能夠讓我們分享日誌,那還有沒有更好的方法呢?如果我是在安卓手機上運行,我要查看日誌是不是很不方便呢?

       那我們就更進一步,我們不是把日誌輸出到檔案了嗎?那我們直接在遊戲裡面查看日誌不是更方便?所以我們的思路是,在遊戲中寫一個日誌顯示介面,然後把記錄檔內容一行一行讀出來,讓他顯示在一個RichText控制項裡面。這樣是不是更方便呢?這個方法我暫時沒時間寫,不過肯定沒問題的,有時間寫好後補上代碼。

      3、方法2已經能夠及時的看到日誌了,我們還可以使用更強大一點的方法,我們可以建一個Log Service器,用戶端在輸出日誌的時候就發送到Log Service器,這樣真機測試就很方便了,和在windows開發很相似了,不過這個方案有點重了,大家使用第二點應該就可以了。
      好了,上面推薦的這三種方案應該能夠解決大部分的調試問題了,再也不用為了看日誌去啟動麻煩的模擬器了。

      轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog)

      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.