ขั้นตอนที่ 1: เรียกใช้ emacs -Q
สิ่งแรกที่คุณต้องทำคือเรียกใช้ emacs โดยไม่ต้องทำการปรับแต่งใด ๆ หากคุณสามารถสร้างปัญหาขึ้นมาใหม่ใน Vanilla Emacs ได้จริง ๆ แล้วมันอาจจะเป็นข้อบกพร่องใน Emacs เอง มันหายาก แต่เราแยกออกเป็นขั้นตอนแรก
หากคุณเริ่มต้น Emacs จากบรรทัดคำสั่งด้วยการ-Q
ตั้งค่าสถานะเช่นemacs -Q
คุณจะได้รับ emacs เปล่าหรือ 'vanilla' โดยไม่มีการกำหนดค่าท้องถิ่นของคุณโหลด ปัญหาของคุณยังคงเกิดขึ้นหรือไม่? หากเป็นเช่นนั้นให้ข้ามไปที่ "การให้ข้อผิดพลาดสูตร"
ขั้นตอนที่ 1b: จะเกิดอะไรขึ้นหากมีปัญหากับแพ็คเกจ
หากปัญหาของคุณเฉพาะแพคเกจเฉพาะแน่นอนคุณไม่สามารถทำซ้ำได้โดยไม่ต้องโหลดแพคเกจที่ แต่คุณต้องการโหลดเฉพาะแพ็คเกจที่เกี่ยวข้องไม่ใช่การกำหนดค่าทั้งหมดของคุณ หากต้องการทำเช่นนั้นให้เรียกใช้emacs -Q
อีกครั้งและเตรียมสคริปต์สั้น ๆ ดังต่อไปนี้:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
แทนที่package1
ด้วยชื่อของแพ็คเกจที่คุณต้องการโหลด หากคุณต้องการโหลดหลายแพ็คเกจให้แก้ไขสคริปต์ตามนี้:
(require 'package)
(setq package-load-list
'((package1 t)
(package2 t)
(package3 t)))
(package-initialize)
การโหลดโค้ดนี้คุณสามารถวางมันลงไปในกันชนและโทร*scratch*
M-x eval-buffer
(หรือบัฟเฟอร์ใด ๆ ตราบใดที่มันไม่มีโค้ดอื่นอยู่!)
ณ จุดนี้คุณได้โหลดแพคเกจและเพียงแค่แพคเกจที่คุณกำลังทดสอบ หากคุณสามารถทำให้เกิดปัญหาได้ในตอนนี้ให้ข้ามไปที่ "การจัดหาสูตรบั๊ก"
ขั้นตอนที่ 2: ค้นหาจุดบกพร่องในตัวคุณ .emacs
ตอนนี้คุณได้ยืนยันแล้วว่าปัญหามาจากบางสิ่งในการกำหนดค่าของคุณ ("การโทรมาจากภายในบ้าน!") การกำหนดค่าของคุณอาจยาวหลายพันบรรทัดและอาจโหลดไฟล์หลายไฟล์ ในการค้นหาปัญหาคุณจะทำการค้นหาแบบไบนารีโดยใส่ความคิดเห็นลงครึ่งหนึ่งของรหัสในแต่ละครั้งเพื่อ จำกัด สิ่งต่าง ๆ ให้แคบลง 1
- เปิด emacs ปกติของคุณ
emacs
โดยไม่มี-Q
ตัวเลือก
- เปิดไฟล์กำหนดค่าของคุณ (โดยปกติ
~/.emacs
หรือ.emacs.d/init.el
หากคุณไม่สามารถลองได้C-h v user-init-file
)
- เลือกครึ่งแรกของไฟล์:
C-space
ในการตั้งเครื่องหมายเลื่อนลงครึ่งทางเพื่อขยายพื้นที่
- ใส่ความคิดเห็นเกี่ยวกับภูมิภาคที่เลือก:
M-;
และบันทึกไฟล์
- เปิดใหม่
emacs
( emacs ทดสอบของคุณ) โดยปล่อยให้ emacs ตัวแรกทำงาน emacs ทดสอบจะอ่านเวอร์ชันที่ลดลงของการกำหนดค่าของคุณ
- ลองทำซ้ำปัญหาในการทดสอบ emacs
- หากคุณไม่สามารถทำซ้ำได้ให้ปิดการทดสอบ emacsและใน emacs ดั้งเดิมของคุณที่
undo
มีความคิดเห็นด้วยC-/
และแสดงความคิดเห็นครึ่งหนึ่งของรหัสที่เหลืออยู่ เปิดemacs ทดสอบใหม่แล้วลองอีกครั้ง
- หากคุณสามารถทำให้เกิดปัญหาอีกครั้งให้ใส่รหัสครึ่งที่เหลือและดูว่ายังมีปัญหาอยู่หรือไม่
- ทำซ้ำขั้นตอนนี้จนกว่าคุณจะพบการกำหนดค่าน้อยที่สุดที่จำเป็นในการทำให้เกิดปัญหาอีกครั้ง
หากปัญหาของคุณเกิดขึ้นกับแพคเกจเฉพาะคุณจะต้องทิ้งรหัสที่โหลดไว้โดยไม่ใส่เครื่องหมายแสดงความคิดเห็นแน่นอน
หากไฟล์กำหนดค่าของคุณโหลดไฟล์อื่น ๆ คุณอาจขยายการค้นหาลงในไฟล์เหล่านั้นด้วย
ณ จุดนี้คุณอาจพบว่าปัญหาเกิดจากรหัสเพียงหนึ่งหรือสองบรรทัด คุณอาจแก้ไขด้วยตนเองได้ ถ้าเป็นเช่นนั้นขอแสดงความยินดีคุณได้เรียนรู้บางสิ่ง! มิฉะนั้นย้ายไปยังขั้นตอนที่สาม
ขั้นตอนที่ 3: การจัดทำสูตร Bug
ณ จุดนี้คุณควรสามารถให้สูตรบั๊กแบบละเอียดเพื่อโพสต์ได้ที่นี่ มันควรจะรวมถึง:
- เวอร์ชั่น Emacs ของคุณ (คุณสามารถรับได้จาก Emacs ด้วย
M-x emacs-version
- ระบบปฏิบัติการของคุณ (Windows #, Mac, Linux Distribution)
- เวอร์ชันของแพ็คเกจที่คุณกำลังต่อสู้หากมี
- เฉพาะขั้นตอนที่จำเป็นที่จะต้องแสดงให้เห็นถึงปัญหาที่เกิดขึ้นรวมทั้งสิ่งที่คุณคาดหวังที่จะเกิดขึ้นและสิ่งที่เกิดขึ้นจริง
ตัวอย่างเช่นฉันอาจโพสต์คำถามเช่นนี้:
ฉันมีปัญหากับโหมดซุปเปอร์ เมื่อฉันใช้M-x sm-compile-code
มันจะทำการถอนออกจากบัญชี PayPal ของฉัน
ขั้นตอนในการทำซ้ำ:
โหลดโหมดซุปเปอร์:
(require 'package)
(setq package-load-list
'((super-mode t)))
(package-initialize)
- เปิดไฟล์ใหม่ด้วย
C-x C-f my-code
- ป้อนรหัสหนึ่งบรรทัด:
10 goto 10
ฉันคาดว่าสิ่งนี้จะเรียก super-compiler และรวบรวมโปรแกรมของฉัน ฉันเห็นข้อความใน minibuffer แทน "$ 100 ถูกโอนจาก paypal ไปยังผู้สร้างโหมด super"
GNU Emacs 25.1.50.3
Debian Linux
Super-mode เวอร์ชั่น 3.1415
1 ฮันเตอร์ Bugแพคเกจอาจจะช่วยให้คุณมีนี้ (กึ่ง) โดยอัตโนมัติตัดไฟล์ init ของคุณ
emacs -Q
เป็นขั้นตอนแรก ฉันเขียนสิ่งนี้ขึ้นเพื่อเชื่อมโยงคำถามเหล่านั้นกับความช่วยเหลือทั่วไปสำหรับผู้ใช้ใหม่