คำถามติดแท็ก debugging

การดีบักเป็นกระบวนการที่เป็นระบบในการค้นหาและลดจำนวนข้อบกพร่องหรือข้อบกพร่องในโปรแกรมคอมพิวเตอร์

9
การใช้ Emacs เป็น C / C ++ IDE ที่มีคุณสมบัติครบถ้วน
ฉันลองและใช้งานมานานกว่าหนึ่งปีเพื่อใช้ Emacs เป็น C / C ++ IDE ฉันประสบความสำเร็จเพียงเล็กน้อยเพียงเล็กน้อยเท่านั้น แต่ได้พบกับกำแพงอิฐสองสามแห่งระหว่างทาง ขณะนี้ฉันกำลังพยายามใช้ CEDET แต่ฉันมีเวลาค่อนข้างเข้าใจวิธีการใช้อย่างมีประสิทธิภาพ คุณสมบัติที่ฉันกำลังมองหาใน IDE มีดังนี้: การจัดการซอฟต์แวร์ "โครงการ" ฉันต้องการให้ IDE มีความรู้สึกของไฟล์ทั้งหมดที่ทำขึ้นในโครงการปัจจุบันของฉันเพื่อให้ฉันสามารถทำหน้าที่เช่นการค้นหาและแทนที่ภายในโครงการของฉัน (มันจะดีถ้าฉันสามารถทำได้โดยไม่ทำให้ต้นไม้ต้นกำเนิดของฉันมีไฟล์สนับสนุนมากมายทำไมฉันต้องมีไฟล์โครงการรวมศูนย์มากกว่าหนึ่งต่อโครงการ?) ความสามารถในการสร้างโครงการปัจจุบันจากภายใน IDE โดยไม่คำนึงถึงบัฟเฟอร์ที่ฉันกำลังเยี่ยมชม ฉันต้องสามารถผูกคีย์ที่จะสร้างโครงการปัจจุบัน การรายงานข้อผิดพลาด ฉันไม่ต้องการอ่านผลลัพธ์มากกว่า 500 บรรทัดเพื่อหาข้อผิดพลาดที่เครื่องมือสร้างรายงาน ข้อผิดพลาดจะแสดงในบัฟเฟอร์ของตัวเองโดยมีหนึ่งบรรทัดต่อข้อผิดพลาด การรับรู้สัญลักษณ์ภายในโครงการและที่ที่มีการกำหนดไว้ ฉันต้องการข้ามไปยังคำจำกัดความของสัญลักษณ์ว่าอยู่ในไฟล์โครงการของฉันหรือในระบบมีไฟล์อยู่ด้วย การแก้ไขข้อบกพร่องทางสายตา ฉันต้องการมีรายการเฝ้าดูของตัวแปรเฉพาะที่อัปเดตโดยอัตโนมัติเมื่อฉันดูรหัส ฉันต้องการที่จะสามารถตั้งค่าเบรกพอยต์ในรหัสดูบรรทัดของรหัสที่จะดำเนินการต่อไป ฉันรู้ว่าคุณสมบัติเหล่านี้มีอยู่เพราะฉันเคยทำงานในแต่ละครั้งหรือใช้ EDE, Semantic, GDB เป็นต้นปัญหาคือฉันไม่เคยมีคุณสมบัติเหล่านี้ทั้งหมดในเวลาเดียวกัน เพราะโดยปกติแล้วแต่ละชิ้นจะต้องมีการกำหนดค่าด้วยตัวเองและโดยปกติแล้วมันจะทำงานมากเกินกว่าจะหาวิธีกำหนดค่าทั้งหมดในครั้งเดียวและทำให้มันทำงานร่วมกันได้ มีโซลูชั่นอะไรบ้างสำหรับการเปลี่ยน Emacs ให้เป็น C / C ++ IDE …

2
การดีบัก Emacs ที่ถูกตรึง
ฉันใช้หมิวสำหรับอีเมลของฉัน ฉันต้องใช้ TLS กับผู้ให้บริการอีเมลของฉันสำหรับ SMTP อย่างไรก็ตามเมื่อฉันพยายามที่จะเรียกมันว่า Emacs ค้าง ฉันต้องการใช้โอกาสนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับแพ็คเกจ Emacs ฉันจะแก้ไขข้อบกพร่องนี้ได้อย่างไร มีการดีบักเกอร์ในตัวบางอย่างเหมือนใน Common LISP ใช่หรือไม่ ฉันสามารถใช้การบันทึกได้หรือไม่

1
ฉันจะแก้ไขปัญหา Emacs ได้อย่างไร
ในสถานการณ์ที่ Emacs ไม่ทำงานเหมือนที่ฉันต้องการฉันจะแก้ไขปัญหาได้อย่างไร ฉันจะใช้ขั้นตอนอะไรในการค้นหาและแก้ไขปัญหาด้วยตนเอง หรือล้มเหลวฉันจะรวบรวมข้อมูลที่เป็นประโยชน์เพื่อให้ผู้คนที่นี่ (หรือในรายชื่อผู้รับจดหมายหรือฟอรัมอื่น ๆ ) สามารถช่วยฉันแก้ปัญหาได้อย่างไร Emacs ของฉันมีแพ็คเกจมากมายสำเนาของตัวอย่าง & วาง (หรือถูกฆ่า & ดึง) จากทั่วอินเทอร์เน็ตและอิลิสที่กำหนดเองของฉันซึ่งฉันจำไม่ได้ว่าเป็นงานเขียนหรือไม่เข้าใจอีกต่อไป มีวิธีที่จะทำให้ความรู้สึกของภาวะแทรกซ้อนเหล่านี้ทั้งหมดหรือไม่?

1
การประเมินผลขัดจังหวะและสังเกตสแต็กปัจจุบันใน emacs-lisp debugger?
หากฟังก์ชั่น emacs-lisp เช่น hook ของโหมดหลักใช้เวลานานกว่าที่คาดไว้ในการเรียกใช้งานบางครั้งฉันต้องการขัดจังหวะและดูที่สแต็กปัจจุบัน โดยหลักการแล้วฉันต้องการดูค่าตัวแปรและอื่น ๆ ในโปรแกรมดีบั๊ก ฉันไม่ได้พูดเกี่ยวกับรหัสที่ฉันจงใจเรียกใช้งานในโหมด emacs-lisp แต่เป็นรหัสที่เรียกใช้ในการทำงานปกติของ emacs ฉันจะขัดจังหวะการเรียกใช้โค้ด emacs-lisp โดยตรงใน emacs ได้อย่างไร ฉันไม่ทราบล่วงหน้าว่าฟังก์ชั่นใดที่ฉันต้องแก้ไข ตัวอย่างเช่นการพิมพ์C-gในขณะที่มันขัดจังหวะการทำงานก็ไม่ได้บอกฉันว่าฟังก์ชั่นใดถูกขัดจังหวะ
17 elisp  debugging 

1
ฉันจะดีบัก emacs crash ได้อย่างไร
ฉันกำลังแก้จุดบกพร่องทำไม emacs เกิดปัญหาเมื่อใช้ฟังก์ชั่นจากแพคเกจ1 M-x report-emacs-bugจุดมุ่งหมายของการดำเนินการแก้ปัญหานี้คือการได้รับข้อมูลที่เป็นประโยชน์ในการส่งใช้ เพื่อรับความช่วยเหลือเกี่ยวกับวิธีการแก้ไขข้อบกพร่อง emacs ฉันได้ดูคู่มือ Emacs แล้ว - คู่มือการทำงานล้มเหลวและคู่มือ Emacs - หลังจากการขัดข้องแต่พวกเขาไม่ได้ช่วย หลังจากที่ผิดพลาดด้วยตนเองหมายถึงemacs-buffer.gdbแต่ผมไม่มีความคิดวิธีการใช้งาน ในขณะที่ขอความช่วยเหลือจาก google ฉันเจอคำถามemacs.SE นี้และฉันจะคอมไพล์ emacs ใหม่โดยใช้-ggdb3แฟล็ก ฉันไม่เคยมีประสบการณ์การใช้มาก่อนgdbดังนั้นฉันจึงลองใช้emacs-buffer.gbdไฟล์นี้ไม่สำเร็จ นี่คือสิ่งที่ฉันพยายาม: gdb -x /path/to/emacs-buffer.gdb gdb -> file /path/to/emacs-buffer.gdb gdb -> source /path/to/emacs-buffer.gdb source /path/to/emacs-buffer.gdb จากบันทึกด้านข้าง emacs ที่คอมไพล์ด้วย-ggdb3แฟล็กใช้เวลาโหลดนานกว่า 10 วินาที; ก่อนหน้านี้คือ 5-6 วินาทีขณะนี้ประมาณ 16-17 วินาที ฉันรู้ว่าวินาทีที่แน่นอนเพราะรหัสที่คำนวณว่าใน init ของฉัน …
16 debugging  gdb 

3
แสดงหมายเลขบรรทัดบนข้อผิดพลาด
สมมติว่า emacs พ่นข้อผิดพลาดบางอย่างที่ฉันไม่เข้าใจ หรืออาจเกิดข้อผิดพลาดว่า "ค่าของ Symbol ในฐานะตัวแปรเป็นโมฆะ: โหมด" แต่มีสัญลักษณ์modesในรหัสของฉันเกิดขึ้นมากมายดังนั้นฉันต้องการบริบทบางอย่าง Emacs สามารถกำหนดค่าให้พูดถึงหมายเลขบรรทัดของเสียงกระเพื่อมเพื่อให้ฉันสามารถรู้รหัสที่ทำให้เกิดข้อผิดพลาดหรือไม่ ฉันได้ลองทำ(setq stack-trace-on-error '(buffer-read-only))และเรียกใช้รหัสที่ทำให้ล้มเหลวในความพยายามที่จะได้รับการติดตามสแต็ก ไม่มีการติดตามสแต็กอย่างใดอย่างหนึ่ง ฉันได้ลองโทรหาedebug-defunฟังก์ชั่นของฉันแล้วลองดู มันไม่ได้จนกว่าฉันจะก้าวออกจากฟังก์ชั่นที่เกิดข้อผิดพลาด (ฉันไม่สนใจสาเหตุของข้อผิดพลาดเฉพาะที่ฉันเผชิญอยู่ในขณะนี้เนื่องจากฉันกำลังพัฒนาทักษะการดีบักทั่วไปสำหรับ elisp โปรดแนะนำเกี่ยวกับวิธีที่ฉันสามารถเปล่งประกายหมายเลขบรรทัดหรือ sexp หรือการติดตามสแต็กจาก ข้อผิดพลาด.)

2
จะยกเลิก `edebug-defun 'ได้อย่างไร?
ฉันจะยกเลิกผลกระทบของได้edebug-defunอย่างไร กล่าวอีกนัยหนึ่งฉันจะยกเลิกคำสั่งที่ทำให้เกิดedebugการเข้าสู่โหมดการแก้จุดบกพร่องเมื่อมีการเรียกใช้ฟังก์ชั่นเฉพาะ? นอกจากนี้ฉันอยากรู้ว่าคำตอบของคำถามนี้อยู่ที่ไหนในเอกสาร ฉันค้นหามันนานเกินกว่าที่คิดว่าจำเป็น
13 debugging  edebug 

1
รับ backtrace จากข้อผิดพลาดทางโปรแกรม
หากมีข้อผิดพลาดจะส่งสัญญาณในรหัส Emacs Lisp และdebug-on-errorคือtฉันได้รับบัฟเฟอร์ backtrace ที่ทำให้ง่ายต่อการคิดออกที่เกิดข้อผิดพลาด อย่างไรก็ตามสำหรับข้อผิดพลาดที่เกิดขึ้นขณะประมวลผลการตอบสนองจากเครือข่ายแบบอะซิงโครนัสมันจะน่ารำคาญถ้ามีบัฟเฟอร์ backtrace ปรากฏขึ้นดังนั้นฉันอยากจะจับข้อผิดพลาดด้วยcondition-caseและเข้าสู่ระบบ ดังนั้นเมื่อฉันจัดการข้อผิดพลาดcondition-caseมีวิธีเข้าถึง backtrace ที่จุดของข้อผิดพลาดหรือไม่? การเรียกใช้backtraceฟังก์ชันรับ backtrace ของโค้ดภายในตัวจัดการซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา (condition-case e (do-something-that-might-fail) (error (message "%s" ;; This gets the wrong backtrace! (with-temp-buffer (let ((standard-output (current-buffer))) (backtrace) (buffer-string))))))

1
ค้นหาที่มาของคำเตือน
ฉันวิ่งออกคำสั่งและได้รับคำเตือนในรถมินิบัส คำเตือนที่แน่นอนก็คือหลังจากที่ผมเติมข้อความอัตโนมัติคำสั่งในcomint-completion-at-point failed to return valid completion datashell-mode ฉันจะทราบที่มาของคำเตือนได้อย่างไร
11 debugging 

1
จะทราบได้อย่างไรว่าฟังก์ชันใดถูกเรียกใช้จาก (backtrace / stacktrace)
ฉันพบปัญหาว่าภูมิภาคปิดใช้งาน (ในโหมดเครื่องหมายชั่วคราว) deactivate-markมีการเรียกใช้ฟังก์ชั่นและฉันต้องการทราบว่าถูกเรียกใช้จากที่ไหน (และทำไม) ฉันพยายามM-x debug-on-entry RET deactivate-markแล้วก็หยุด แต่ฉันไม่พบวิธีการโทรหา stacktrace ที่แสดงทั้งหมดคือ: Debugger entered--entering a function: * deactivate-mark() ฉันพยายามM-x edebug-eval-defunแต่ Edebug ไม่แสดงผู้โทรด้วย ฉันจะทราบได้อย่างไรว่าเหตุใดจึงdeactivate-markมีการเรียก(จากที่ใด) ฉันกำลังมองหาฟังก์ชั่น backtrace หรือ stacktrace แก้ไข: advice-addเคล็ดลับ: (defun message-show-backtrace () (message "%s" (backtrace-frame 10))) (advice-add deactivate-mark :before #'message-show-backtrace) ผลิตในnil*Messages* แก้ไข: ข้อมูลเพิ่มเติมเกี่ยวกับdeactivate-mark: http://emacshorrors.com/posts/deactivate-mark.html

1
วิธีการดีบักข้อผิดพลาดในรักษาการณ์และระหว่างล็อคแบบอักษร
เมื่อมีข้อผิดพลาดเกิดขึ้นในกระบวนการยามหรือในระหว่างการล็อคตัวอักษรแล้ว Emacs จะไม่แสดง backtrace แม้ว่าจะdebug-on-errorเปิดใช้งานก่อนหน้านี้ ฉันเข้าใจว่าทำไมข้อผิดพลาดเหล่านี้ถึงได้ข้อผิดพลาดเดียวกันอาจถูกเรียกอีกครั้งในขณะที่พยายามนำเสนอ backtrace อย่างไรก็ตามเมื่อฉันต้องการแก้ไขข้อผิดพลาดจริง ๆ แล้วมันไม่ได้มีประโยชน์มาก ฉันค่อนข้างจะเสี่ยงที่ Emacs จะไม่ตอบสนองมากกว่าต้องทำงานจากสิ่งนี้: error in process sentinel: Wrong type argument: stringp, nil หลังจากทั้งหมดฉันสามารถเริ่มอินสแตนซ์ที่สองถ้าเริ่มแรกจะบ้า บริบทเล็ก ๆ น้อย ๆ จะช่วยได้มากขึ้นเมื่อมีหลายสถานที่ซึ่งข้อผิดพลาดดังกล่าวอาจเกิดขึ้นในยามรักษาการณ์ ดังนั้นฉันจะบังคับให้ Emacs แสดง backtrace ได้อย่างไรในกรณีที่debug-on-errorไม่มีผลกระทบ?
10 debugging 

2
นำทางไปยังซอร์สโค้ดของฟังก์ชันและตัวแปรในตัว
ตลอดทั้งวันฉันใช้C-h fหรือC-h v( describe-functionและdescribe-variable) เพื่อค้นหาเอกสารสำหรับฟังก์ชั่นและตัวแปรตลอดเวลา บ่อยกว่านั้นถ้าฉันไม่ได้รับข้อมูลทั้งหมดที่ฉันต้องการฉันจะคลิกที่ลิงค์ของไฟล์ในตอนท้ายของ: some-random-command is an interactive compiled Lisp function in `some-mode.el'. และนำทางไปยังซอร์สโค้ด ใช้งานได้กับแพ็คเกจที่ติดตั้ง แต่ดูเหมือนจะใช้งานไม่ได้กับแพ็คเกจในตัว ตัวอย่างเช่นที่ด้านบนของหน้าช่วยเหลือสำหรับคำสั่งdescribe-functionทั้งหมดที่ฉันได้รับคือ: describe-function is an interactive compiled Lisp function. ไม่มีลิงก์ไปยังซอร์สโค้ด มีวิธีใดที่จะนำทางไปยังซอร์สโค้ดของแพ็คเกจในตัวได้อย่างรวดเร็ว ฉันรู้ว่าฉันสามารถหาซอร์สโค้ดได้เช่น, /usr/share/emacs/24.5/lispและหาวิธีการเข้าถึงไดเรกทอรีนั้นได้อย่างรวดเร็ว แต่ฉันอยากรู้ว่ามีวิธีที่ง่ายและรวดเร็วในการนำทางฟังก์ชั่น / คำจำกัดความของตัวแปรในตัว รหัสแหล่งที่มา. ขอบคุณ!

1
วิธีการรวบรวม emacs ที่มีสัญลักษณ์ debug?
ฉันมีปัญหาในการเดินผ่านซอร์สโค้ด emacs ใน gdb ฉันคิดว่าฉันขาดสัญลักษณ์แก้ปัญหา ทำตามคำแนะนำจากhttps://stackoverflow.com/a/4298982/2752242ฉันลองแล้ว: ./configure CFLAGS="-ggdb3 -O0" CXXFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" --with-gif=no --prefix=$HOME/local/apps/emacs-24.4/ แต่นั่นไม่ได้ผล มีคำแนะนำในการรวบรวมสัญลักษณ์การดีบักหรือไม่ ขอบคุณ!
9 debugging 

2
การดีบั๊กของ Emacs ที่ล้มเหลว
แม้ว่า Emacs (24.3.93.1) จะทำงานได้ดีหากเปิดตัวจาก Finder หากรุ่นเทอร์มินัลเปิดตัว: /Applications/Emacs.app/Contents/MacOS/Emacs -nw Emacs ล่มด้วย: Fatal error 11: Segmentation fault[1] 51512 abort /Applications/Emacs.app/Contents/MacOS/Emacs -nw. ดูเหมือนว่าปัญหาเกิดจากบรรทัดเดียวใน init.el (set-face-attribute 'default nil :font "Menlo-16") หากบรรทัดนั้นถูกคอมเม้นต์แล้วเวอร์ชันเทอร์มินัลของ Emacs ก็จะเริ่มต้นเช่นกัน เพื่อระบุสาเหตุของความผิดพลาดนั้นทำให้ฉันใช้เวลาหลายชั่วโมง (ลดการเริ่มต้นของฉันครึ่งต่อครึ่ง) ฉันทราบว่าในกรณีใด ๆ Emacs จะรับช่วงตัวอักษรและขนาดตัวอักษรใด ๆ ก็ตามที่ระบุไว้ในแอปเทอร์มินัล (โดยทั่วไปแล้วบรรทัดนั้นไม่มีความหมายใน cli) โดยทั่วไปแล้วจะมีวิธีที่ดีกว่าในการดีบัก Emacs ที่ล้มเหลวหรือไม่ บางทีใช้ cli debugger บางชนิดที่จะพิมพ์ข้อความอธิบายเพิ่มเติมหรือไม่ เหตุใดบรรทัดนั้นจึงส่งผลกระทบกับ Emacs ผ่านทาง CLI …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.