Unity Debug Tips ตอนที่ 1 by tosawat
Oct0
เคยไหมเวลาที่ตัวแปรซักตัวหนึ่ง ถูกเรา set เป็นค่าหนึ่ง แล้วมันไม่ยอมเปลี่ยน(อันที่จริงแล้ว ต้องบอกว่ามันเปลี่ยนแล้ว แต่โดน code ส่วนอื่นแก้ทับลงไปอีกรอบ) เป็นสาเหตุให้โปรแกรมของเรามันทำงานไม่เหมือนกับที่เราตั้งใจไว้
วันนี้จะมานำเสนอวิธีแก้ปัญหา ที่จะทำให้การ debug ปัญหาทำนองนี้เร็วขึ้นมากกกครับ
วิธีนี้จะแนะนำให้ใช้ get set ให้เป็นประโยชน์ครับ สมมุติว่าตัวแปรเจ้าปัญหาของเราประกาศไว้ว่าอย่างนี้
public int myVar;
ให้เราแก้เป็น
public int temp;
public int myVar{
get{
return temp;
}
set{
Debug.Log("myVer is set to "+value);
temp = value;
}
}
ทีนี้เมื่อมีการแก้ตัวแปร myVar เมื่อไหร่ มันก็จะ Debug.Log ออกมาให้เราเห็นพร้อมกับ stack trace ด้วย ทำให้เรารู้แล้วว่า code ส่วนไหนที่แก้ตัวแปรนี้ไปบ้างงงง
รวมคำสั่ง ADB (Android Debug Bridge) by heha
Feb1
ADB (Android Debug Bridge) ก็คือเครื่องมือ comand line tools ตัวหนึ่งเอาไว้สั่งการจาก PC ไปยังมือถือที่ต้องการผ่านสาย USB (หรือ wifi ผ่านบทความนี้) สามารถเรียกใช้งานได้ผ่าน path
sdkpath/platform-tools/adb
โดย sdkpath คือ path ที่เราลง android sdk ไว้ สรุปคำสั่งที่ใช้บ่อยๆ มีดังนี้
- adb devices – เป็นคำสั่งแรกที่ต้องใช้หลังนำมือถือเสียบ computer เป็นครั้งแรก เพื่อเช็คว่า PC เห็นมือถือเครื่องนี้หรือยัง หากปรากฏชื่ device มาก็แสดงว่าเริ่มต้นใช้งานได้ หากยังไม่ปรากฏ ต้องอนุญาตให้ PC เครื่องนี้สั่งการมือถือเครื่องนี้ได้ก่อนด้วยการ Enable Debug mode ผ่าน USB ที่ตัวเครื่องมือถือ แล้วเสียบ PC และติ๊กอนุญาตให้ PC สั่งมือถือเครื่องนี้ได้ (ป้องกันใครไม่รู้มาเอามือถือเราไปสั่ง adb ลบโปรแกรมทิ้งเล่น)
- adb logcat -s Unity – ใช้ดู log ที่พ่นผ่าน app ที่สร้างจาก Unity ทั้งหมด
- adb install path/to/apk – ใช้ install apk ลงเครื่อง
- adb install -r path/to/apk – ใช้ Install apk เหมือนเมื่อกี้ แต่ต่างจากเดิมคือถ้ามี app นั้นๆ อยู่แล้วในเครื่องจะลงทับให้อัตโนมัติ ไม่ต้อง uninstall ก็ได้
- adb install -d path/to/apk – เหมือนอันบน แต่อนุญาติให้ install apk ที่เลขเวอร์ชั่นต่ำกว่าเดิมทับ app เดิมที่อาจจะใหม่กว่าได้
- adb uninstall com.packagename.myapp – uninstall โดยกำหนดชื่อ package ที่ต้องการ com.packagename.myapp ซึ่งบางครั้งการ uninstall ที่ตัวเครื่อง android เองจะยังไม่ลบ app ไปจริงๆ ก็ต้องใช้คำสั่งนี้ช่วย
- adb clear com.packagename.myapp – clear ข้อมูลของ app ที่ระบุทั้งหมด (ให้ผลเหมือนการกด clear cache/clear data ผ่าน app manager ในมือถือ)
- adb push path/in/pc path/in/android-device – ใช้ copy ไฟล์จากเครื่อง PC ลงมือถือผ่าน command line
- adb pull path/in/android-device /path/in/pc – ใช้ copy ไฟล์จากมือถือมาลง PC ผ่าน command line
- adb shell screenrecord /path/in/android-device/demo.mp4 – ใช้อัดหน้าจอมือถือลงเครื่องเพื่อทำ screencast ได้อย่างสะดวก (ใช้ได้เฉพาะ android 4.4 ขึ้นไปเท่านั้น)
Unity Debugging(2) by tosawat
Jan0
เคยไหม เวลาที่อยากให้ Object บางตัว โผล่ออกมา หรือหายไป แต่มันดันไม่เป็นไปอย่างที่เราอยากให้เป็น บางทีมันดันมี Object ที่อยากให้หายไปตอนนี้แต่มันดันโผล่มา หรือไม่ยอมหายไป เอ้า ทีนี้จะทำยังไงล่ะ!! วันนี้เลยจะมาบอกวิธีการที่ใช้หาว่า Object ตัวนั้นๆ มันหายไป หรือโผล่มาตอนไหนบ้าง แล้วถูกสั่งให้หายไปหรือ โผล่มาโดย Code บรรทัดไหนเป็นคนสั่ง
1. ก่อนอื่นเลยให้สร้าง Script แล้วใส่ Method ตามนี้
void OnEnable(){
Debug.LogError("OnEnable");
}
void OnDisable(){
Debug.LogError("OnDisable");
}
2. Add Script ที่เราสร้างใหม่นี้ไปใส่กับ Object ที่ต้องการจะดูว่ามันหายหรือโผล่มาตอนไหน
3. คราวนี้เมื่อ Object ตัวนี้ หายไป หรือโผล่มา ก็จะมี ข้อความ OnEnable หรือ OnDisable พ่นออกมา พร้อมกับ Call Stack ด้วย ทำให้เรารู้ได้ทันทีว่า Object นี้หายไปเพราะอะไร นั่นเองงง
Unity Debugging(1) by tosawat
Dec0
เคยไหมเวลามีปุ่มหลายๆปุ่ม หรือมี Collider หลายๆอัน ซ้อนกันอยู่ แล้วเมื่อคลิ๊กหรือกดปุ่ม แล้วไม่โดน Collider หรือปุ่มที่ต้องการ เอ้า ทีนี้จะทำยังไงล่ะ!! วันนี้เลยจะมาบอกวิธีการที่ใช้หาว่าเรากดไปโดน Collider ตัวไหนโดยใช้ RayCast กันครับ
1. ก่อนอื่นเลยให้สร้าง Script แล้วใส่ Method Update ตามนี้
void Update() {
if (Input.GetMouseButtonDown(0)) {
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
if (hit.collider != null){
Debug.LogError(hit.collider.name);
}
}
}
2. Add Script ที่เราสร้างใหม่นี้ไปใส่กับ MainCamera ของ Scene นั้นๆ
3. เมื่อเรากดไปโดน Collider ใดๆก็ตาม Script นี้จะพ่นชื่อของ GameObject ที่เรากดไปโดนมาให้ทุกครั้ง แค่นี้เราก็รู้แล้วว่า เรากดไปโดนปุ่ม หรือ Collider ตัวไหนกันแน่ครับ
วิธี remote debugging node.js ด้วย node-inspector by heha
May0
เคยใช้พวก Watch, Breakpoint, Step into, Step Over, Step Out ช่วยในการ debug javascript ใน Chrome ไหมครับ รู้หรือไม่ว่าเราสามารถ remote debug code node.js ไปยังเครื่อง server ที่อยู่คนละที่ได้เลย วิธีการมีดังนี้ครับ
- npm install -g node-inspector
- เพิ่ม debugger; ในบรรทัดที่ต้องการ set breakpoint ภายในโปรแกรม node.js ของเรา
- node-inspector –web-port=1338 & (เปลี่ยน 1338 เป็นเลข port ที่คุณต้องการเปิดให้ debug เข้ามาได้ หรือถ้าไม่ใส่จะ default ที่ 8080)
- หากโปรแกรมคุณชื่อ server.js สั่งรันดังนี้คือ node –debug node server.js (ห้ามเอา –debug ไปต่อท้าย ต้องอยู่หลัง node เท่านั้น)
- เข้าเว็บ http://localhost:1338/debug?port=5858 (แก้ localhost เป็นชื่อเว็บที่คุณใช้งานได้เลย)
- จะปรากฎดังรูป พร้อมให้คุณใช้งาน debug!
- ส่วนที่วงสีแดงไว้ในข้อ 6 คือเราสามารถเปิด browse file ใน project ของเราเพื่อมา set breakpoint เพิ่มสดๆ ด้วยการคลิกที่เลขบรรทัดทางซ้ายได้เลยทันที สะดวกต่อการใส่ breakpoint เฉพาะเวลาที่ต้องการเท่านั้น
- สามารถเอาเม้าส์ชี้เพื่อดูค่าตัวแปร, add to watch, step into, step over, step out ได้ครบถ้วน Yay!
ขอให้โชคดีกับ Node.js ทุกๆ ท่าน