Contact
Line : comsiam
Contact
Line : comsiam

Google Gemini สามารถช่วยตรวจหา Bug ใน Source Code วิเคราะห์ Error Message, Stack Trace, Logic และความสัมพันธ์ระหว่างไฟล์ เพื่อช่วยหาว่าปัญหาอาจเกิดจากส่วนใดของโปรแกรมได้ เหมาะทั้งกับ Code สั้น ๆ และโปรเจกต์หลายไฟล์ที่นำเข้าเป็น Code Folder หรือ GitHub Repository
แต่การใช้ Gemini หา Bug ให้ได้ผลดีไม่ควรเริ่มจากคำสั่งว่า “โค้ดพัง ช่วยแก้ให้หน่อย” เพราะข้อมูลไม่เพียงพอ วิธีที่แม่นกว่าคือส่ง อาการ + Error Message + Code ที่เกี่ยวข้อง + สิ่งที่คาดว่าจะเกิด + สิ่งที่เกิดจริง + Environment แล้วให้ Gemini วิเคราะห์ Root Cause ก่อนเสนอการแก้ไข
Bug คือข้อผิดพลาดใน Software ที่ทำให้โปรแกรมทำงานไม่ตรงตามที่ออกแบบไว้
Bug ไม่ได้หมายถึงโปรแกรมเปิดไม่ได้เพียงอย่างเดียว แต่อาจเป็นปัญหาหลายรูปแบบ เช่น
Bug บางประเภทเห็นได้ทันที แต่บางประเภทเกิดเฉพาะกับข้อมูลบางชุดหรือ Environment บางแบบ
ได้ Gemini สามารถช่วย Debug ปัญหา Code ได้หลายรูปแบบ เช่น
Google ยังระบุว่า Gemini สามารถใช้ GitHub Repository เพื่อช่วยทำความเข้าใจ Codebase และ Debug Issues ได้
ยิ่ง Context ครบ การวิเคราะห์ก็ยิ่งมีประโยชน์
อย่างน้อยควรให้ข้อมูล 6 อย่าง
อธิบายว่าเกิดอะไรขึ้น
เช่น
“กด Login แล้วหน้าจอหมุนค้าง”
เช่น
“เมื่อ Username และ Password ถูกต้องควรเข้าสู่ Dashboard”
เช่น
“API ตอบ 500 และหน้าเว็บไม่เปลี่ยนหน้า”
ส่งข้อความ Error เต็ม ๆ
ส่ง Function หรือไฟล์ที่น่าจะเกี่ยวข้อง
เช่น
ข้อมูลทั้งหมดนี้ช่วยลดการเดาของ AI
สามารถใช้ Prompt แม่แบบนี้ได้
“ช่วย Debug ปัญหานี้โดยยังไม่ต้อง Rewrite Code
อาการ:
[อธิบาย]
Expected Behavior:
[สิ่งที่ควรเกิด]
Actual Behavior:
[สิ่งที่เกิดจริง]
Error Message:
[Error]
Environment:
[ภาษา / Framework / Version / OS]
Code:
[แนบ Code]
ให้วิเคราะห์ตามลำดับ:
แยกสิ่งที่ยืนยันได้จาก Code ออกจากสิ่งที่เป็นเพียงสมมติฐาน”
Prompt นี้เหมาะกว่าการสั่งให้ Gemini เขียน Code ใหม่ทันที
Error Message มักมีข้อมูลสำคัญมาก
ตัวอย่าง
TypeError: Cannot read properties of undefined (reading 'name')
at getUserProfile (user.js:42:17)
at async profileController (profile.js:18:5)
อย่าส่งแค่
TypeError
เพราะ Stack Trace บอกได้ว่า
“อ่าน Stack Trace นี้จากบนลงล่าง แล้วอธิบาย Call Stack ก่อน จากนั้นระบุจุดที่ควรเปิด Code ตรวจเป็นอันดับแรก”
วิธีนี้ทำให้ Debug เป็นระบบมากขึ้น
สิ่งที่ควรหลีกเลี่ยงคือ
“แก้ Code นี้ให้หน่อย”
แล้ว Gemini Rewrite ทั้ง Function
เพราะอาจแก้อาการแต่ไม่แก้ต้นเหตุ
ควรสั่ง
“ยังไม่ต้องสร้าง Code แก้ไข ให้หา Root Cause ก่อน”
ตัวอย่าง
หน้าเว็บแสดง
Cannot read properties of undefined
สาเหตุอาจเป็น
ต้องรู้ก่อนว่าสาเหตุใดจริง
Bug ที่ Reproduce ไม่ได้จะแก้ยากมาก
ใช้ Prompt
“จากข้อมูลนี้ ช่วยสร้างขั้นตอน Reproduce Bug ที่สั้นที่สุด เพื่อให้ฉันทดสอบว่าปัญหาเกิดจริงภายใต้เงื่อนไขใด”
ตัวอย่าง
/profile ตอบข้อมูลไม่มี nameเมื่อ Reproduce ได้ชัด การแก้และการสร้าง Test จะง่ายขึ้น
Workflow ที่แนะนำคือ
ทำให้ Bug เกิดซ้ำได้
เก็บ Error Message และ Stack Trace
หาว่า Bug น่าจะอยู่ Module ใด
ให้ Gemini อธิบายสาเหตุที่เป็นไปได้
ทดสอบทีละสมมติฐาน
แก้เฉพาะจุด
ตรวจว่า Bug หาย
ตรวจ Feature อื่น
ตรวจ Code ที่เปลี่ยน
นี่เป็น Workflow ที่ปลอดภัยกว่าการสุ่มแก้ Code หลายจุดพร้อมกัน
ตัวอย่าง Python
def average(numbers):
return sum(numbers) / len(numbers)
Code นี้ทำงานได้ถ้า numbers มีข้อมูล
แต่ถ้าเรียก
average([])
จะเกิดปัญหา Division by Zero
สามารถถาม Gemini
“Review Function นี้และหา Input ที่ทำให้โปรแกรม Error หรือให้ผลลัพธ์ไม่ถูกต้อง โดยยังไม่ต้องแก้ Code”
Gemini อาจช่วยหา Edge Case เช่น
Noneจากนั้นจึงสร้าง Test ก่อนแก้
Logic Bug ยากกว่า Syntax Error เพราะโปรแกรมรันได้ปกติ แต่ผลลัพธ์ผิด
ตัวอย่าง
def discount(price, percent):
return price - percent
ถ้าต้องการลดราคาเป็นเปอร์เซ็นต์ Code นี้มี Logic ผิด แม้จะไม่มี Exception
ควรถาม
“ตรวจ Function นี้เทียบกับ Requirement ว่า Discount ต้องคำนวณเป็นเปอร์เซ็นต์ และหา Logic ที่ไม่ตรง Requirement”
สิ่งสำคัญคือ Gemini ต้องรู้ Requirement
หากไม่มี Requirement AI ก็ไม่รู้ว่าผลลัพธ์ใดคือสิ่งที่ถูกต้อง
Python มักเจอปัญหา เช่น
TypeErrorValueErrorKeyErrorIndexErrorAttributeErrorModuleNotFoundErrorIndentationErrorPrompt ตัวอย่าง
“Python Code นี้เกิด KeyError: 'email'
Trace ว่าค่า Dictionary มาจากที่ใด และตรวจว่ามี Case ใดที่ Key email ไม่มีอยู่ โดยยังไม่ต้องแก้ Code”
จากนั้นอาจถามต่อ
“เสนอวิธีแก้ที่ไม่ซ่อน Error จริง และยังรักษา Behavior เดิม”
JavaScript มักมี Bug จาก
undefinednullตัวอย่าง
const userName = user.profile.name;
ถ้า profile ไม่มีค่า Code จะ Error
Prompt
“Trace ว่า user.profile ถูกกำหนดค่าจากที่ใด และหาเส้นทางที่ทำให้ profile เป็น undefined”
ดีกว่าถามว่า
“เพิ่ม Optional Chaining ให้หน่อย”
เพราะ Optional Chaining อาจเพียงซ่อน Bug ต้นเหตุ
PHP Application สามารถมีปัญหาจาก
ตัวอย่าง Prompt
“PHP Code นี้ Login สำเร็จแต่ Session ไม่ถูกเก็บ
Trace ตั้งแต่รับ Form → ตรวจ Password → สร้าง Session → Redirect และหา Step ที่อาจผิด”
หากใช้ WordPress ควรระบุเพิ่มว่า
ที่เกี่ยวข้อง
SQL Bug อาจไม่ได้เกิด Error เสมอไป
ตัวอย่าง Query อาจรันได้แต่ได้ข้อมูลซ้ำหรือยอดรวมผิด
Prompt
“Query นี้ให้ยอดรวมสูงกว่าความจริง ตรวจ JOIN และ GROUP BY แล้วอธิบายว่ามีโอกาสเกิด Row Duplication ตรงไหน”
สามารถส่ง
ไปพร้อมกัน
ยิ่ง Context ครบ ยิ่ง Debug ง่าย
ถ้า API มีปัญหา ควรให้ข้อมูลทั้ง Request และ Response
ตัวอย่าง
POST /api/login
Request:
{
"email": "test@example.com"
}
Response:
500 Internal Server Error
พร้อม Log ฝั่ง Server
จากนั้นถาม
“Trace API Request นี้จาก Route → Controller → Service → Database และระบุจุดที่สามารถทำให้เกิด 500”
ช่วยแยกปัญหาออกเป็น Layer
โปรเจกต์จริงอาจมี Flow เช่น
Frontend
↓
API Route
↓
Controller
↓
Service
↓
Repository
↓
Database
ถ้า Import Code Folder หรือ GitHub Repository เข้า Gemini สามารถถาม
“Trace Feature Checkout ตั้งแต่ผู้ใช้กดปุ่มจน Order ถูกบันทึก Database และระบุจุดที่สามารถทำให้ Order ซ้ำได้”
นี่เป็นจุดที่การให้ Gemini เห็นหลายไฟล์มีประโยชน์มาก
Gemini Web App รองรับ Import Code Folder
หลังนำ Project เข้าแล้ว Prompt ที่แนะนำคือ
“Error นี้เกิดใน Project ที่แนบมา
ก่อนแก้:
เหมาะกับ Bug ที่เกี่ยวข้องหลาย Module
Google ระบุโดยตรงว่าสามารถ Import GitHub Repository เข้า Gemini แล้วถามให้ช่วย Debug Issues ได้
หลัง Import สามารถใช้ Prompt
“ค้นหา Source Code ที่เกี่ยวข้องกับ Error นี้จาก Repository แล้วสร้าง Dependency Chain ของ Function ที่เกี่ยวข้อง”
หรือ
“หา Commit ไม่ต้องทำ เพราะ Repository ที่ Import ผ่าน Gemini ไม่ได้ให้ Commit History ผ่านฟีเจอร์นี้ ให้ตรวจเฉพาะ Codebase ปัจจุบันที่มองเห็น”
สิ่งนี้ช่วยไม่ให้ Prompt ขอข้อมูลที่ Integration ไม่ได้มี
แนวทางที่ดีคือสร้าง Test ที่ทำให้ Bug Fail ก่อน
Prompt
“จาก Bug นี้ ช่วยสร้าง Regression Test ที่ควร Fail กับ Code ปัจจุบัน และ Pass หลังจากแก้ Bug”
Workflow
Bug
↓
Create Failing Test
↓
Fix Code
↓
Test Pass
↓
Run Full Test Suite
ข้อดีคือป้องกัน Bug เดิมกลับมาอีกในอนาคต
อย่าให้ AI ฟันธงสาเหตุเดียวเร็วเกินไป
ใช้ Prompt
“เสนอ Root Cause ที่เป็นไปได้สูงสุด 5 ข้อ เรียงจากมีหลักฐานมากที่สุดไปน้อยที่สุด และบอกวิธีทดสอบแต่ละข้อ”
ตัวอย่าง
| ลำดับ | สาเหตุ | วิธีตรวจ |
|---|---|---|
| 1 | Response ไม่มี field | Inspect API Response |
| 2 | State ยังโหลดไม่เสร็จ | Log State |
| 3 | Property ชื่อผิด | ตรวจ Schema |
ทำให้ Debug เป็นกระบวนการทดสอบ ไม่ใช่เดา
Log เป็นข้อมูลที่มีประโยชน์มาก
ส่งเฉพาะช่วงที่เกี่ยวข้อง เช่น
10:01:05 Login request
10:01:05 User found: 182
10:01:06 Profile: null
10:01:06 TypeError...
แล้วถาม
“เชื่อมเหตุการณ์ใน Log กับ Code และอธิบายว่าจุดเปลี่ยนจากข้อมูลปกติไปเป็น Error อยู่ตรงไหน”
อย่าส่ง Log ทั้ง Server หลาย GB โดยไม่จำเป็น
เลือกเฉพาะช่วงก่อนและหลัง Error
Intermittent Bug มักเกี่ยวข้องกับ
Prompt
“Bug นี้ไม่ได้เกิดทุกครั้ง ช่วยสร้างรายการข้อมูลที่ควร Log เพิ่มเพื่อแยก Race Condition, Network Problem และ State Problem ออกจากกัน”
นี่มีประโยชน์กว่าการให้ AIเดา Patch จาก Code อย่างเดียว
ได้ในระดับ Code Review เบื้องต้น
ตัวอย่าง
“Function นี้ใช้เวลานานมากเมื่อข้อมูลเพิ่มขึ้น ตรวจ Time Complexity, Loop, Database Query และ Network Call ที่อาจเป็น Bottleneck”
แต่ Performance ต้องใช้ข้อมูล Runtime ประกอบ เช่น
AI ไม่ควรฟันธง Performance จาก Source Code เพียงอย่างเดียวหากไม่มีหลักฐาน
สามารถช่วย Review จุดเสี่ยง เช่น
Prompt
“ตรวจเฉพาะ Security Bug ที่มีหลักฐานจาก Code และแยกข้อสงสัยที่ต้องใช้ Static Scanner หรือ Runtime Test เพิ่ม”
Gemini ไม่ควรถูกใช้แทน Security Tools ทั้งหมด
สำหรับ Production ควรใช้
ร่วมด้วย
หลังยืนยัน Root Cause แล้ว ให้สั่ง
“เสนอ Minimal Patch สำหรับ Bug นี้ โดย:
Minimal Patch ทำให้ Review ง่ายกว่าการ Rewrite ทั้ง Module
Bug บางชนิดแก้ได้หลายแบบ
สามารถถาม
“เสนอวิธีแก้ 3 แบบ:
เปรียบเทียบ Risk และผลกระทบของแต่ละแบบ”
ช่วยให้ Developer เลือกตามสถานการณ์
Production Hotfix อาจต้องการ Minimal Fix
ส่วน Version ใหญ่ในอนาคตอาจเลือก Architecture Fix
บางครั้ง AI อาจเสนอ
ทั้งที่ Bug แก้ได้ไม่กี่บรรทัด
ก่อนยอมรับ ให้ถาม
“Bug นี้แก้ได้โดยไม่เพิ่มหรือเปลี่ยน Dependency หรือไม่”
ถ้า Package Version เป็นต้นเหตุจริง ค่อยพิจารณา Upgrade
Syntax และ API สามารถต่างกันตาม Version
ควรส่งข้อมูล เช่น
Python 3.13
Node.js 24
PHP 8.x
Framework Version
Package Version
แทนการบอกเพียง
“ใช้ Python”
โดยเฉพาะ Bug จาก Library ควรระบุ Exact Version จาก
package.jsonrequirements.txtpyproject.tomlcomposer.jsonตามระบบที่ใช้
ถ้า Bug เพิ่งเกิดหลังแก้ Code สามารถส่ง Diff ให้ดู
Prompt
“Feature นี้ทำงานก่อนการเปลี่ยนแปลง แต่พังหลัง Diff นี้ ช่วยตรวจเฉพาะการเปลี่ยนแปลงที่อาจทำให้เกิด Regression”
เหมาะมากเมื่อ Scope ของปัญหาเล็ก
ยิ่ง Diff เล็ก การหา Bug ยิ่งง่าย
ก่อนสรุป Root Cause สามารถให้ตรวจ Checklist
ข้อมูลเข้าถูกหรือไม่
ตรวจข้อมูลครบหรือไม่
ค่าปัจจุบันถูกหรือไม่
Data Type ตรงหรือไม่
มีค่าหายหรือไม่
รอ Promise ครบหรือไม่
Query ถูกหรือไม่
Request/Response ตรง Contract หรือไม่
มีสิทธิ์หรือไม่
Config ต่างกันหรือไม่
Version ตรงหรือไม่
Checklist นี้ช่วยให้ไม่โฟกัสสาเหตุเดียวเร็วเกินไป
แม้ Patch ดูถูกต้อง แต่สามารถสร้าง Regression เช่น
ทุก Patch ควรผ่าน
ก่อน Deploy
Google เองแนะนำให้ตรวจสอบและทดสอบ Code ที่ Generative AI สร้างขึ้นก่อนนำไปพึ่งพาหรือใช้งานจริง
Context ไม่พอ
AI ต้องเดามากขึ้น
ข้อมูลสำคัญหาย
AI ไม่รู้ว่าพฤติกรรมถูกต้องคืออะไร
อาจวิเคราะห์ API ผิด Version
เพิ่ม Regression Risk
ไม่รู้ว่าอะไรแก้ Bug จริง
Bug อาจกลับมา
Patch อาจเพิ่มช่องโหว่
ยังไม่ผ่าน Regression Test
ก่อนส่ง Code, Log หรือ Configuration ให้ Gemini ควรตรวจหา
ตัวอย่างไม่ควรส่ง
DATABASE_PASSWORD=my-real-password
ควรเปลี่ยนเป็น
DATABASE_PASSWORD=YOUR_PASSWORD
หาก Secret รั่วไปแล้ว ควร Rotate หรือ Revoke Secret ตามระบบนั้น ไม่ใช่เพียงลบออกจาก Prompt หรือ Source Code
สำหรับงานของ comsiam แนวทางที่ควรใช้คือสร้างชุด Debug Context ที่มีเฉพาะ Code, Error และ Log ที่จำเป็น และลบข้อมูลลับก่อนทุกครั้ง
“วิเคราะห์ Root Cause จาก Error และ Code นี้ก่อน โดยยังไม่ต้องแก้”
“อธิบาย Stack Trace จากต้นเหตุไปจนถึงจุดที่ Error ถูกแสดง”
“ตรวจ Code เทียบกับ Expected Behavior และหา Logic ที่ไม่ตรง Requirement”
“สร้าง 5 Root Cause ที่เป็นไปได้ พร้อมวิธีทดสอบทีละข้อ”
“สร้างขั้นตอน Reproduce Bug ที่สั้นที่สุด”
“Trace Flow ตั้งแต่ Entry Point จนถึง Function ที่มีปัญหา”
“สร้าง Patch ที่เปลี่ยน Code น้อยที่สุดหลังจากยืนยัน Root Cause แล้ว”
“สร้าง Test ที่ Fail ก่อนแก้และ Pass หลังแก้ Bug”
“Patch นี้อาจกระทบ Feature หรือ Module ใดบ้าง”
“ตรวจ Code หลังแก้อีกครั้งว่ามี Regression, Security Issue หรือ Edge Case ใหม่หรือไม่”
ได้ Gemini สามารถช่วยอ่าน Source Code, Error Message และ Stack Trace เพื่อวิเคราะห์ Bug และเสนอแนวทาง Debug ได้
ได้ สามารถ Import Code Folder หรือ GitHub Repository เพื่อให้ Gemini ใช้ Context จากหลายไฟล์ในการวิเคราะห์ปัญหาได้
ควรส่ง เพราะ Error Message และ Stack Trace ช่วยลด Scope และชี้ไปยังไฟล์ Function หรือบรรทัดที่เกี่ยวข้องได้มาก
สามารถเสนอ Patch ได้ แต่ควรหา Root Cause และสร้างวิธี Reproduce ก่อน จากนั้นต้อง Review และ Test Patch ก่อนใช้งานจริง
ได้ หากให้ Requirement, Expected Behavior และ Actual Behavior ที่ชัดเจน เพราะ Logic Bug มักไม่มี Error Message
ไม่ควรถือว่าถูกต้อง 100% AI สามารถเข้าใจ Logic หรือ Environment ผิดได้ ต้องยืนยัน Root Cause ด้วย Test, Log และ Runtime จริง
วิธีใช้ Gemini ตรวจหา Bug ในโค้ดให้ได้ผลดีที่สุดคือให้ข้อมูลครบและ Debug อย่างเป็นขั้นตอน เริ่มจาก Reproduce → Error → Stack Trace → Scope → Root Cause → Hypothesis Test → Minimal Patch → Regression Test
อย่าเริ่มต้นด้วยการให้ Gemini Rewrite Code ทั้ง File เพราะอาจทำให้ต้นเหตุจริงถูกซ่อนและสร้าง Bug ใหม่ ควรให้ AI อธิบายหลักฐานที่สนับสนุน Root Cause และบอกวิธีทดสอบแต่ละสมมติฐานก่อน
สำหรับ Codebase หลายไฟล์ สามารถใช้ Code Folder หรือ GitHub Repository เพื่อช่วย Trace Flow ข้าม Module ได้ และเมื่อ Gemini เสนอ Patch แล้วต้องผ่าน Test และ Code Review ก่อน Deploy เสมอ
แนวทางของ comsiam คือใช้ Gemini เป็นผู้ช่วยตั้งสมมติฐานและลดพื้นที่ค้นหา Bug ส่วนการยืนยันว่า Bug อยู่ตรงไหนและ Patch ถูกต้องหรือไม่ยังต้องอาศัย Runtime, Test และการตรวจสอบจาก Developer