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

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

1
การดีบักสคริปต์ความแตกต่างระหว่าง -x ถึง set -euxo pipefail คืออะไร
วิธีหลักที่ฉันรู้ว่าการดีบักสคริปต์คือการเพิ่ม-xไปที่ shabang ( #!/bin/bash -x) เมื่อเร็ว ๆ นี้ฉันได้พบกับวิธีการใหม่เพิ่มset -euxo pipefailสิทธิใต้ shabang เช่นเดียวกับใน: #!/bin/bash set -euxo pipefail อะไรคือข้อแตกต่างที่สำคัญระหว่างสองวิธีในการดีบัก มีบางครั้งที่คุณอยากได้คนที่เหนือกว่าคนอื่นหรือไม่? ในฐานะน้องใหม่หลังจากอ่านที่นี่ฉันไม่สามารถแยกข้อสรุปเช่นนั้นได้

2
gdb สามารถดีบัก suid root โปรแกรมได้หรือไม่?
ผมเขียนโปรแกรมที่โทรและsetuid(0)execve("/bin/bash",NULL,NULL) จากนั้นฉันก็ทำ chown root:root a.out && chmod +s a.out เมื่อฉันรัน./a.outฉันจะได้รูทเชลล์ อย่างไรก็ตามเมื่อฉันทำgdb a.outมันเริ่มกระบวนการตามผู้ใช้ปกติและเปิดตัวเปลือกผู้ใช้ ดังนั้น ... ฉันจะดีบักโปรแกรมรูทของ setuid ได้ไหม?
16 debugging  setuid  gdb 

4
ฉันจะดีบักปัญหา Suspend-to-RAM บน Linux ได้อย่างไร
ฉันหวังว่าจะได้รับคำแนะนำจากประสบการณ์เกี่ยวกับวิธีแก้ไขข้อผิดพลาดเกี่ยวกับ suspend-to-RAM คำแนะนำเฉพาะสำหรับสถานการณ์ของฉัน (รายละเอียดด้านล่าง) จะดีมาก แต่ฉันก็สนใจคำแนะนำทั่วไปเกี่ยวกับวิธีการแก้ไขปัญหาดังกล่าว ปัญหา: บ่อยครั้งเมื่อฉันพยายามที่จะระงับเครื่องของฉันมันจะติดอยู่ในสถานะ "ไม่หยุดชั่วคราว แต่ไม่ตื่น" บ่อยครั้งที่หน้าจอจะเป็นสีดำสนิท แต่บางครั้งจะมีข้อความแสดงข้อผิดพลาดต่อไปนี้: GLib-WARNING **: getpwuid_r(): failed due to unknown user id (0) นอกจากนี้รัฐนี้ยังจะมีแฟน ๆ ที่เตะเข้าเกียร์สูง วิธีเดียวที่จะได้รับสถานะนี้คือการปิดแล็ปท็อปด้วยตนเอง ข้อมูลบางอย่าง $ uname -a Linux baltar 2.6.35-22-generic #34-Ubuntu SMP Sun Oct 10 09:26:05 UTC 2010 x86_64 GNU/Linux $ lsb_release -a Distributor ID: Ubuntu Description: …

2
strace สำหรับการเรียกใช้ไลบรารี
ฉันรู้จัก strace ซึ่งเป็นประโยชน์อย่างยิ่งสำหรับการดูการโทรของระบบ มีเทียบเท่าที่สามารถติดตามการโทรไปยังห้องสมุดภายนอกหรือไม่ ตัวอย่างเช่นฉันกำลังพยายามแก้ไขข้อผิดพลาดบางอย่างของ SSLeay ด้วยไบนารีของบุคคลที่สามที่ฉันไม่สามารถเข้าถึงรหัสได้ (และใครเป็นผู้พัฒนาที่ไม่ตอบสนอง) ฉันเชื่อว่าฉันถูกจับปัญหา แต่ฉันไม่สามารถทดสอบได้โดยไม่เห็นว่าข้อมูลที่ถูกตรวจสอบลายเซ็นถูกจัดรูปแบบสำหรับการส่งออกไปยัง SSLeay

1
จะทำให้ gdb ไม่ถามฉัน“ y หรือ n” ได้อย่างไร?
เมื่อฉันใช้คำสั่ง GDB add-symbol-fileเพื่อโหลดสัญลักษณ์ GDB จะถามฉันเสมอว่า 'y หรือ n' ดังนี้: gdb> add-symbol-file mydrv.ko 0xa0070000 add symbol table from file "mydrv.ko" at .text_addr = 0xa0070000 (y or n) วิธีที่จะทำให้มันไม่ถามและดำเนินการอย่างเงียบ ๆ ?
14 debugging  gdb 

2
มีวิธีใดบ้างที่เชลล์สคริปต์จะรู้ว่าโปรแกรมใดทำงานหรือไม่
ใน * nix world มีวิธีใดที่เชลล์สคริปต์จะมีข้อมูลเกี่ยวกับโปรแกรมที่เรียกใช้งานหรือไม่ ตัวอย่าง: /path/to/script1 /path/to/script_xyz ในสถานการณ์สมมตินี้script_xyzจะมีข้อมูลเส้นทาง ( /path/to/script1) หรือ ประมวลผล PID ของนิติบุคคลที่ได้ดำเนินการ หมายเหตุ: ฉันอยากรู้เกี่ยวกับการแก้ปัญหาและแนวทางที่แตกต่างกันฉันไม่คาดหวังว่าสิ่งนี้จะเป็นไปได้จริง

2
การสังเกตการเขียนฮาร์ดดิสก์ในพื้นที่เคอร์เนล (พร้อมไดรเวอร์ / โมดูล)
ขออภัยล่วงหน้าหากโพสต์นี้ค่อนข้างหนาแน่น / ยุ่ง แต่ฉันมีเวลายากที่จะกำหนดได้ดีกว่า ... โดยทั่วไปฉันต้องการที่จะศึกษาว่าเกิดอะไรขึ้นกับการเขียนฮาร์ดดิสก์และฉันต้องการที่จะรู้ว่า: ความเข้าใจของฉันด้านล่างถูกต้องหรือไม่ถ้าไม่ฉันจะไปไหนผิด มีเครื่องมือที่ดีกว่าในการ "บันทึก" บันทึกข้อมูลเกี่ยวกับทุกด้านที่เกิดขึ้นบนพีซีระหว่างการเขียนดิสก์หรือไม่? รายละเอียดเพิ่มเติม - ก่อนอื่นระบบปฏิบัติการที่ฉันใช้คือ: $ uname -a Linux mypc 2.6.38-16-generic #67-Ubuntu SMP Thu Sep 6 18:00:43 UTC 2012 i686 i686 i386 GNU/Linux ดังนั้นฉันมีดังต่อไปนี้ง่าย ๆ (เช่นการตรวจสอบตามปกติสำหรับความล้มเหลวของการดำเนินงานจะถูกข้าม) โปรแกรม C พื้นที่ผู้ใช้wtest.c: #include <stdio.h> #include <fcntl.h> // O_CREAT, O_WRONLY, S_IRUSR int main(void) { char filename[] …

2
วิธีจับภาพเฉยๆจากซ็อกเก็ตโดเมน Unix (การตรวจสอบซ็อกเก็ต AF_UNIX)
การจับ TCP / IP และ UDP สามารถทำได้โดยใช้tcpdump/ dumpcapและสร้างไฟล์ pcap / pcapng ซึ่งสามารถป้อนให้ Wireshark สำหรับการวิเคราะห์เพิ่มเติม มีเครื่องมือที่คล้ายกันนี้อยู่ในซ็อกเก็ตโดเมนชื่อ Unix หรือไม่? (โซลูชันทั่วไปที่ใช้กับซ็อกเก็ตแบบนามธรรมจะดีเช่นกัน) straceตาม - ไม่เพียงพอไม่ตรงไปตรงมาเพื่อกรองสำหรับซ็อกเก็ตโดเมน Unix I / O พร็อกซี่ใช้socatหรือเหมือนกันยังไม่เหมาะที่จะเป็นเป้าหมายคือการวิเคราะห์เรื่อย ๆ สำหรับโปรแกรมที่เปิดมีอยู่ ฉันจะขอรับการจับแพ็คเก็ตที่ฉันสามารถใช้ใน Wireshark เพื่อการวิเคราะห์ได้อย่างไร ตัวอย่างการใช้งานโพรโทคอลคือ X11 (Xorg แอปพลิเคชันปัจจุบันของฉัน) และ cURL / PHP (HTTP) ฉันเห็นCONFIG_UNIX_DIAGตัวเลือกในเคอร์เนล Linux นี่เป็นการใช้งานหรือไม่?

3
เป็นไปได้หรือไม่ที่จะใช้คำสั่ง builtin กับ Bash?
ได้รับแรงบันดาลใจจากคำถามนี้ชื่อ: เมื่อใดที่คำสั่งในตัวถูกโหลดไปยังหน่วยความจำในขณะที่พยายามตอบคำถามนี้ฉันลองใช้คำสั่งต่อไปนี้และรู้สึกประหลาดใจเล็กน้อยที่ฉันไม่สามารถเรียกใช้: $ strace cd $HOME มีวิธีที่ฉันสามารถใช้เพื่อรัน strace สำหรับคำสั่ง builtin เพื่อ Bash หรือไม่?
13 bash  debugging  strace 

2
เทียบเท่ากับ "truss -T" และ "truss -U" บน Linux หรือไม่
มีเทียบเท่าของสิ่งที่-Tและ-Uตัวเลือกของtrussยูทิลิตี้ Solaris ไม่เกี่ยวกับลินุกซ์ สิ่งเหล่านี้คือการระบุการเรียกของระบบ ( -T) หรือฟังก์ชั่นห้องสมุด ( -U) ซึ่งเมื่อเรียกใช้โดยแอปพลิเคชันที่ติดตามจะทำให้เกิดการหยุด หรือกล่าวเป็นอย่างอื่นฉันต้องการให้กระบวนการใด ๆ ที่เริ่มต้นโดยแอปพลิเคชันที่ติดตามแล้วหยุดทำงาน (ราวกับถูกฆ่าโดย SIGSTOP) ทันทีที่ทำการเรียกระบบหรือการเรียกฟังก์ชั่นไลบรารีที่แชร์ straceและltraceบน Linux นั้นมีชุดฟีเจอร์มากมายของ Solaris trussแต่พวกเขาดูเหมือนจะไม่ทำเช่นนั้น ตัวอย่างเช่น truss -f -T open cmd จะเป็นเช่นstrace -f cmdนั้นยกเว้นว่าหากกระบวนการที่ดำเนินการcmdหรือลูกหลานของมันopenเรียกระบบใด ๆมันจะหยุดทันที (และฉันสามารถดำเนินการต่อในภายหลังได้ตามความสะดวกของฉัน) ในบางกรณีฉันสามารถใช้งานgdbได้catch syscallแต่ฉันกำลังมองหาวิธีแก้ปัญหาที่สามารถติดตามส้อมได้อย่างสะดวกและดำเนินการต่อสำหรับกระบวนการทางแยกทั้งหมดและทำexecveต่อไปเรื่อย ๆ ดูเหมือนว่าฉันจะเรียกคืนยูทิลิตี้บางอย่างที่ให้ฟังก์ชั่นเดียวกันแม้แต่หนึ่ง (หรือตัวเลือกสำหรับยูทิลิตี้เดียวกันนั้น) ไปยังแอปพลิเคชันขั้นตอนเดียวระหว่างบางเหตุการณ์ของ syscall บางระยะไกลเช่นนั้น แต่หน่วยความจำของฉัน ที่อยู่บน Linux

2
การถ่ายโอนข้อมูลหลักกระบวนการโดยไม่ฆ่ากระบวนการ
มีวิธีรับ core dump (หรือคล้ายกัน) สำหรับกระบวนการโดยไม่ฆ่ากระบวนการจริงหรือไม่ ฉันมีกระบวนการหลามแบบมัลติเธรดที่ทำงานบนระบบฝังตัว และฉันต้องการที่จะได้ภาพรวมของกระบวนการภายใต้สภาวะปกติ (เช่นกับกระบวนการอื่น ๆ ที่จำเป็นต้องใช้) แต่ฉันไม่มีหน่วยความจำเพียงพอที่จะเชื่อมต่อ gdb (หรือเรียกใช้ภายใต้ gdb) โดยไม่ต้องใช้กระบวนการหลาม เป็นคนเดียวที่ทำงาน ฉันหวังว่าคำถามนี้สมเหตุสมผล

3
เราจะติดตามปัญหาการล่มของโปรแกรมใน Linux ได้อย่างไร?
หากแอปพลิเคชันขัดข้องใน Windows เราสามารถตรวจสอบตัวแสดงเหตุการณ์ในเครื่องมือการดูแลระบบเพื่อดูสิ่งที่ผิดพลาด บางครั้งมันมีข้อมูลที่เป็นประโยชน์อื่น ๆ ไม่ได้ แต่มันเป็นการเริ่มต้น ใน linux หากแอปพลิเคชัน (ใด ๆ ) ขัดข้องว่ามีใครเริ่มติดตามสิ่งที่เกิดขึ้น มีบันทึกกลางบางอย่างหรือคล้ายกันบ้างไหม?

1
ACPI BIOS Error / AE_NOT_FOUND
ฉันได้รับข้อความแสดงข้อผิดพลาดเหล่านี้ทุกครั้งที่ฉันรีบูตเดสก์ท็อป (และอีกสองสามอย่างฉันไม่ทราบวิธีเก็บรักษาเมื่อปิดเครื่อง แต่สิ่งเหล่านี้ไม่เกี่ยวข้องกับคำถามนี้): [gorre@uplink ~]$ journalctl -p err..alert ... -- Reboot -- May 11 21:47:03 uplink kernel: ACPI BIOS Error (bug): Failure looking up [\_SB.PCI0.RP04.PXSX._SB.PCI0.RP05.PXSX], AE_NOT_FOUND (20180105/dswload2-194) May 11 21:47:03 uplink kernel: ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20180105/psobject-252) May 11 21:47:03 uplink kernel: ACPI Error: Method parse/execution failed \_SB.PCI0.RP04.PXSX, …

4
ฉันจะรู้ได้อย่างไรว่าสคริปต์ bash ที่กำลังเรียกใช้อยู่ในปัจจุบันได้รับการเรียกใช้ด้วย -x เพื่อการดีบั๊กหรือไม่
ฉันมีสคริปต์launch.shที่รันตัวเองเป็นผู้ใช้อื่นเพื่อสร้างไฟล์กับเจ้าของที่ถูกต้อง ฉันต้องการส่ง -x ไปยังการเรียกใช้นี้หากผ่านมาถึงสคริปต์แล้ว if [ `whoami` == "deployuser" ]; then ... bunch of commands that need files to be created as deployuser else echo "Respawning myself as the deployment user... #Inception" echo "Called with: <$BASH_ARGV>, <$BASH_EXECUTION_STRING>, <$->" sudo -u deployuser -H bash $0 "$@" # How to pass -x …
11 bash  debugging 

2
ล็อกไฟล์ของคนเร่ร่อนอยู่ที่ไหน
ฉันกำลังพยายามที่จะแก้ปัญหาที่เกี่ยวข้องกับคนจรจัดหรือ VirtualBox (ดูไทกาคนจรจัดล้มเหลวในการให้สภาพแวดล้อมไทก้าที่ทำงาน # 21 ) คำสั่งจะVAGRANT_LOG=debug vagrant up --debugพิมพ์ข้อมูลที่มีประโยชน์และมีประโยชน์มากมาย บันทึกนี้อยู่ที่ไหน แก้ไข: เป็นจริงเช่นเดียวกับVAGRANT_LOG=debug vagrant up vagrant up --debugฉันทำงาน / กับ: Funtoo-Linux, Vagrant 1.4.3 และ VirtualBox 4.3.32

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.