Debugging - kuimoani/defold GitHub Wiki
μ΄ λ§€λ΄μΌμ Defoldμ μλ λλ²κΉ κΈ°λ₯μ λν΄ μ€λͺ ν©λλ€.
Defoldμμ κ²μμ λλ²κ·Ένλ κ°μ₯ κ°λ¨ν λ°©λ²μ μΆλ ₯ λλ²κΉ (print debugging)μ μ¬μ©νλ κ²μ λλ€. μ΄ κΈ°μ μ κ·Έλ₯ print()λ pprint() ν¨μλ₯Ό μ¬μ©ν΄μ λ³μμ κ°μ μ΄ν΄λ³΄κ³ μ€ν νλ¦μ μΆμ νλ λ°©λ²μ λλ€. λ§μ½ μ€ν¬λ¦½νΈκ° μλ κ²μ μ€λΈμ νΈκ° μ΄μνκ² λμνλ€λ©΄, λλ²κΉ μ©λμ μ€ν¬λ¦½νΈλ₯Ό μΆκ°νλ©΄ λ©λλ€.
μΆλ ₯ ν¨μλ₯Ό μ¬μ©νλ©΄ Editorμ Console μ°½μ κ°μ΄ μΆλ ₯λ©λλ€. λν draw_text λ©μΈμ§λ₯Ό @render μμΌμΌλ‘ 보λ΄μ νλ©΄μ ν μ€νΈλ₯Ό 그릴 μλ μμ΅λλ€.
msg.post("@render:", "draw_text", {text = "My value: " .. my_val, position = vmath.vector3(200, 200, 0)})물리 μμ§μμ κ³μ°νλλ° λ¬Έμ κ° μκ²Όλ€λ©΄, νλ©΄μ μ (line)μ κ·Έλ €μ κ³μ°μ μκ°μ μΌλ‘ νννλ κ²μ΄ λμμ΄ λκΈ°λ ν©λλ€. μ΄ λ°©λ²μ draw_line λ©μΈμ§λ₯Ό @render μμΌμΌλ‘ 보λ΄μ 그릴 μ μμ΅λλ€.
msg.post("@render:", "draw_line", {start_point = my_start, end_point = my_end, color = my_color})Luaλ λͺλͺ μν©μμ μ μ©ν λλ²κΉ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ 곡ν©λλ€. νΉν Lua νκ²½μ λ΄λΆλ₯Ό μ‘°μ¬ν΄μΌ νλ κ²½μ° νμν μλ μμ΅λλ€. λ λ§μ μ 보λ http://www.lua.org/pil/contents.html#23 λ₯Ό μ°Έκ³ λ°λλλ€.
Defold μμ§μ Lua IDE ZeroBrane Studio λΌλ λ¬΄λ£ μ€νμμ€λ₯Ό ν΅ν΄ Lua μ€ν¬λ¦½νΈλ₯Ό λλ²κΉ νκΈ° μν κΈ°λ₯μ λ΄μ₯νκ³ μμ΅λλ€. λλ²κΉ κΈ°λ₯μ μν΄μλ ZeroBrane Studioλ₯Ό μ€μΉν΄μΌ ν©λλ€. μ΄ νλ‘κ·Έλ¨μ OSXμ Windowsμμ μ€ν κ°λ₯ν©λλ€.
http://studio.zerobrane.com μμ "ZeroBrane Studio"λ₯Ό λ€μ΄λ‘λ νμΈμ.
ZeroBraneμ΄ νλ‘μ νΈμ νμΌλ€μ μ°ΎμΌλ €λ©΄, Defold νλ‘μ νΈ λλ ν 리μ μμΉλ₯Ό μλ €μ€μΌ ν©λλ€. κ°λ¨ν λ°©λ²μΌλ‘λ Defold projectμμ Show in Finder/Explorer λ©λ΄λ‘ μ°Ύμ μ μμ΅λλ€.
- "game.project" μμ λ§μ°μ€ μ€λ₯Έμͺ½ ν΄λ¦
- OSXμμ Show in Finder μ ν, Windowsμμ Show in Explorer μ ν
OS X:
Windows:
ZeroBraneμ μ€μ νκΈ° μν΄ Project βΈ Project Directory βΈ Chooseβ¦β λ₯Ό μ ννμΈμ.
μ΄λ κ² νμ¬ Defold νλ‘μ νΈ λλ ν 리μ μΌμΉνκ² μ€μ νλ©΄, ZeroBraneμμ Defold νλ‘μ νΈμ λλ ν 리 νΈλ¦¬ κ΅¬μ‘°κ° λ³΄μ΄κ² λλ©° μ΄ νμΌλ€μ μ΄κ±°λ λ€λ£° μ μκ² λ©λλ€.
μΆμ²νλ λ€λ₯Έ κ΅¬μ± λ°©λ²μ μλ λ¬Έμμμ μμΈν μ€λͺ νλλ‘ νκ² μ΅λλ€.
λλ²κΉ μΈμ μ μμνκΈ° μ μ, ZeroBraneμ λ΄μ₯λ λλ²κΉ μλ²κ° μ€νλμ΄μΌ ν©λλ€. μ΄ λ©λ΄λ Project λ©λ΄μμ μ°Ύμ μ μμΌλ©° menu:Project βΈ Start Debugger Serverλ₯Ό μ ννλ©΄ λ©λλ€.
λλ²κΉ μ Defold μ΄ν리μΌμ΄μ μ μλͺ μ£ΌκΈ°μ μ΄λ μ§μ μμλ μμν μ μμ§λ§, Lua μ€ν¬λ¦½νΈμμ μ°μ μ μΌλ‘ μμλμ΄μΌ ν©λλ€. λλ²κΉ μΈμ μ μμνκΈ° μν Lua μ½λλ μλμ²λΌ μμ±ν μ μμ΅λλ€.
local dbg = require "builtins.scripts.mobdebug"
dbg.start()μ μ½λλ₯Ό μ΄ν리μΌμ΄μ μ μΆκ°ν΄μ, ZeroBraneμ λλ²κΉ μλ²μ μ°κ²°(κΈ°λ³Έκ°μΌλ‘ "localhost"λ‘ μ°κ²°λ¨)λκ³ λ€μ κ΅¬λ¬Έμ΄ μ€νλκΈ° μ μ μ€μ§(pause) λ©λλ€.
dbg.start()κ° νΈμΆλμμ λ κ²μμ΄ μ’ λ£λμ΄ λ²λ¦°λ€λ©΄, ZeroBraneμ΄ λ¬Έμ λ₯Ό κ°μ§νμ¬ κ²μμΌλ‘ μ’ λ£ μ»€λ§¨λ(exit command)λ₯Ό μ μ‘νκΈ° λλ¬ΈμΌ μλ μμ΅λλ€. λͺ κ°μ§ μ΄μ λ‘ μΈν΄, ZeroBraneμ λλ²κΉ μΈμ μ μμνκΈ° μν΄ μ΄λ€ νμΌμ μ΄μ΄μΌ ν νμλ μμ μ μμ΅λλ€. λ§μ½ ZeroBraneμμ "Canβt start debugging without an opened file or with the current file not being saved (untitled.lua)."(λ²μ: μ΄λ¦° νμΌμ΄λ νμ¬ νμΌμ΄ μ μ₯λμ§ μμ μνμμ λλ²κΉ μ μμν μ μμ΅λλ€.) μλ¬κ° λ°μνλ©΄ dbg.start() κ° μΆκ°λ ν΄λΉ νμΌμ μ΄μ΄ μ΄ μλ¬λ₯Ό μμ νμμμ€.
λλ²κΉ μ λλ²κΉ μ΄ μμλ μμΉμμλ§ lua 컨ν μ€νΈλ₯Ό νμ±ν ν μ μμ΅λλ€. game.projectμμ "shared_state"λ₯Ό νμ±ν νλ©΄ λλ²κΉ μ΄ μμλ μμΉμ μκ΄μμ΄ λͺ¨λ μ΄ν리μΌμ΄μ μ λλ²κΉ ν μ μμ΅λλ€.
Debugging session started in "/branches/1610/1159/Main/". (λλ²κΉ μΈμ μ΄ "/branches/1610/1159/Main/" μμ μμλμμ΅λλ€.)
λΌλ λ©μΈμ§κ° λνλλ©΄ μ΄μ ZeroBraneμμ λλ²κΉ κΈ°λ₯μ μ¬μ©ν μ μκ² λμ΄ μ€λ¨μ (breakpoint)λ₯Ό μΆκ° μμ ν΄μ λ¨κ³λ³λ‘ κ²μ¬ν μ μμ΅λλ€.
μ°κ²° μλκ° μ€ν¨νλ€λ©΄(λλ²κΉ μλ²λ₯Ό μ€ννμ§ μμκ±°λ ν΄μ), μ°κ²° μλ νμ μ μμ μΌλ‘ μ΄ν리μΌμ΄μ μ κ³μ μ€νν©λλ€.
λλ²κΈ°κΉ μ μΌλ° λ€νΈμν¬ μ»€λ₯μ (TCP)μμ λ°μνλ―λ‘ μ격μΌλ‘ λλ²κΉ μ΄ κ°λ₯ν©λλ€. μ¦ λͺ¨λ°μΌ μ₯μΉκ° μ€νλλ λμ μ΄ν리μΌμ΄μ μ λλ²κ·Έ νλκ²λ κ°λ₯ν©λλ€.
λλ²κΉ μ μμνκΈ° μν΄μ κΈ°λ³Έμ μΌλ‘ start() λ₯Ό νΈμΆν΄ localhostλ‘ μ°κ²°μ μλν μ μμ§λ§ μλμ²λΌ ZeroBraneμ λλ²κΉ μλ²μ μ μνκΈ° μν΄ νΉμ μ£Όμλ₯Ό μ§μ μμ ν μλ μμ΅λλ€.
local dbg = require "builtins.scripts.mobdebug"
dbg.start("192.168.5.101")λν μ΄ κΈ°λ₯μ 8172 ν¬νΈλ₯Ό ν΅ν΄ TCP μ°κ²°λλ―λ‘ λ°©νλ²½ λ±μ μννΈμ¨μ΄κ° μ격 μ₯μΉμμ μ°κ²°μ λ§κ³ μμ§ μμμ§ μ²΄ν¬νλ κ²μ΄ μ€μν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ΄ν리μΌμ΄μ μ΄ λλ²κΉ μλ²μ μ°κ²°νλ €κ³ μλν λ μ€λ¨λ μ μμ΅λλ€.
λλ²κΉ νλ λμ ZeroBraneμ΄ μλμΌλ‘ Lua μ€ν¬λ¦½νΈ νμΌμ μ΄λλ‘ ν μλ μμ΅λλ€. μ΄ κΈ°λ₯μ μλμΌλ‘ νμΌμ μ΄μ§ μμλ λ€λ₯Έ μμ€ νμΌμ ν¨μ μ 보λ₯Ό λ¨κ³μ μΌλ‘ μ΄ μ μμ΅λλ€.
μ°μ μλν°μ configuration νμΌμ μ΄μ΄μ μ¬μ©μμ© λ²μ μΌλ‘ μμ ν΄μΌ ν©λλ€.
- Edit βΈ Preferences βΈ Settings: User λ©λ΄ μ ν
- configuration νμΌμ μλ νλͺ©μ μΆκ°ν¨
- λλ²κΉ νλ λμ μꡬλλ νμΌμ μλμΌλ‘ μΌ editor.autoactivate = true - ZeroBraneμ μ¬μμ
Defoldλ 리μμ€λ€μ ν«λ¦¬λ‘λ ν μ μμ΅λλ€. κ²μμ κ°λ°μ€μΌ λ μ΄ κΈ°λ₯μ νΉμ μμ μ λλ¨ν λΉ λ₯΄κ² ν μ μκ² λμμ μ€λλ€. κ²μμ΄ λΌμ΄λΈ μνλ‘ μ€νμ€μΈ λμμλ μ€ν¬λ¦½νΈλ₯Ό λ³κ²½ ν μ μκ² ν΄ μ€λλ€. μΌλ°μ μΈ μ¬μ© μ¬λ‘λ‘λ κ²μνλ μ΄ λ§€κ°λ³μλ€μ μ‘°μ νκ±°λ κ²μ μ€νμ€μ λλ²κΉ μ μννλ μ¬λ‘ λ±μ΄ μμ΅λλ€.
λ³κ²½λ 리μμ€λ₯Ό 리λ‘λνλ €λ©΄, Edit βΈ Reload Resource λ©λ΄λ₯Ό μ ννκ±°λ ν΄λΉ λ¨μΆν€λ₯Ό λλ₯΄λ©΄ λ©λλ€.
λͺ¨λ μ€ν¬λ¦½νΈ μ»΄ν¬λνΈλ on_reload() ν¨μλ₯Ό μ μν μ μμ΅λλ€. μ΄ ν¨μλ₯Ό μ μνλ©΄ μ€ν¬λ¦½νΈκ° μλν°μμ κ²μμΌλ‘ 리λ‘λ λ λ μΈμ λ μ§ νΈμΆ λ©λλ€.
function on_reload(self)
-- νμ¬ μλ μΆλ ₯
print(self.velocity)
-- μλλ₯Ό 0μΌλ‘ μ€μ
self.velocity = vmath.vector3()
endDefold μμ§μ νλ‘νμΌλ§ μ 보λ₯Ό κ²μ μ€νμ€μ νμν μλ μμ΅λλ€. μ΄ κΈ°λ₯μ λλ²κΉ μ΄λ μ΅μ νλ₯Ό ν λ ν° λμμ΄ λ©λλ€.
function on_reload(self)
-- ν«λ¦¬λ‘λ λ λ νλ‘νμΌλ¬λ₯Ό μΌ¬
msg.post("@system:", "toggle_profile")
endνλ‘νμΌλ¬λ μ΄ν리μΌμ΄μ μ΄ μ€νμ€μΌ λ μ€μκ° μ 보λ₯Ό νμν©λλ€.
κ²μμ΄ μ€νλλ λμ, μμΈν νλ‘νμΌλ§ μ 보λ₯Ό μ 곡νλ μΉκΈ°λ° νλ‘νμΌλ¬μλ μ μ ν μ μμ΅λλ€. μ΄ κΈ°λ₯μ λ°μ΄ν° μ§μ λ€μ μνλ§νμ¬ λ μμΈν λΆμν μ μκ² ν΄ μ€λλ€.
νλ‘νμΌλ¬μ μ μνκΈ° μν΄μλ:
- λμ μ₯μΉ(target device)μμ κ²μμ μμν¨
- μΉλΈλΌμ°μ λ₯Ό μ΄μ΄ http://<μ₯μΉμ IP address>:8002 λ‘ μ μν¨
κ²μμ΄ λ°μ€ν¬ν μ»΄ν¨ν°μμ μ€νμ€μ΄λΌλ©΄, http://localhost:8002 μ£Όμλ‘ νλ‘νμΌλ¬μ μ μ ν μ μμ΅λλ€. λμ μ₯μΉμ IP μ£Όμλ Project βΈ Target λ©λ΄μμλ μ°Ύμ μ μμ΅λλ€.
μ΄ νλ‘νμΌλ¬λ 4κ°μ μΉμ μΌλ‘ λλμ΄μ Έ μμΌλ©° νμ¬ μν λ°μ΄ν°μ 4κ°μ§ λ·°λ‘ κ°κ° λ€λ₯΄κ² 보μ¬μ€λλ€. μν λ°μ΄ν°λ₯Ό μ λ°μ΄νΈ νλ €λ©΄, μλ¨μ Capture λ²νΌμ λλ₯΄λ©΄ λ©λλ€.
νλ μ μ€λ²λ·°λ νμ¬ μνλ§λ 20 νλ μμ λλν νμν©λλ€. κ° λ°(bar)μ λμ΄λ νλ μμ μμλ μκ°μ λνλ λλ€. μΌμͺ½μ μ«μλ νμ¬ μν λ°μ΄ν°μ ν νλ μμμ λ³΄λΈ μ΅λ μκ°μ λνλ λλ€.
μλμ νλ μ μ€λ²λ·°λ νλ μ λ°μ΄ν°λ₯Ό μμΈνκ² λ³΄μ¬μ€λλ€. μ€λ²λ·°μ νλ μ λ°λ₯Ό ν΄λ¦ν΄μ λ°μ΄ν°λ·°μμ νΉμ νλ μμ λ°μ΄ν°λ₯Ό λνλΌ μ μμ΅λλ€. λν ν΄λ¦λ νλ μ λ°μ΄ν°μ νλ μ νμμ°¨νΈ(timechart)λ νμ΄μ§ νλ¨μ 보μ¬μ€λλ€.
νλ μ λ°μ΄ν° λ·°λ νμ¬ μ νλ νλ μμ μμΈν μΈλΆνν λ°μ΄ν°μ ν μ΄λΈμ λλ€. μ΄ λ·°μμ κ° μμ§ μ€μ½ν(scope)κ° μΌλ§λ λ§μ λ°λ¦¬μ΄(milliseconds)λ₯Ό μλͺ¨νλμ§λ₯Ό μ μ μμΌλ©°(μΌμͺ½) μ€μ½ν λ΄μ μλ μν μ§μ (sample points)λ λ³Ό μ μμ΅λλ€(κ°μ΄λ°). μ€λ₯ΈνΈμ μΉ΄μ΄ν°(counter) ν μ΄λΈμ΄ μλλ°, μν λ°μ΄ν°μ κ° νλ μλ§λ€ μμ²λ λλ‘μ° μ½(draw calls) μλ₯Ό μΆμ νκΈ°κ° μ½μ΅λλ€.
μν ν¬μΈνΈ λλ μΉ΄μ΄ν°μ κ΄λ ¨λ 체ν¬λ°μ€λ₯Ό ν΄λ¦νλ©΄ λ°μ΄ν°λ₯Ό μλ νλ‘―μ μΆκ°ν μ μμ΅λλ€.
νλ μ νλ‘― λ·°λ X μΆμλ νλ μ μ, Y μΆμλ μκ°(λ°λ¦¬μ΄)μΌλ‘ λ νλ μ λ°μ΄ν° ν μ΄λΈμ μ¬μ©νμ¬ λͺ¨λ μνλ§λ νλ μμ νλ‘―μ 보μ¬μ€λλ€. κ° μ νλ λ°μ΄ν° ν¬μΈνΈλ νλ μ λ°μ΄ν° ν μ΄λΈμ μ§μ λ νΉμ μμμΌλ‘ κ·Έλ €μ§λλ€.
νλ μ νμ μ°¨νΈλ μ νλ νλ μ λμ μμ§μ΄ μλͺ¨ν μκ°μ μμ£Ό μ½κ² μ‘°μ¬ν μ μκ² μκ°μ μΌλ‘ 보μ¬μ€λλ€.
(μΌλΆ κ·Έλν½ μμ μ Kenneyκ° μ μνμ΅λλ€ : http://kenney.nl/assets)












