ในสภาพแวดล้อม cygwin คำสั่ง linux 'strace' จะพร้อมใช้งาน strace แสดงผลการทำงานร่วมกันของแอปพลิเคชัน OS <--> ทั้งหมด (ในกรณีนี้แอปพลิเคชัน <--> cygwin <--> ระบบปฏิบัติการ) และการเรียกระบบที่เฉพาะเจาะจงหรือการดำเนินการอื่น ๆ
ในการใช้ strace คุณเพียงแค่เติมคำสั่ง strace ก่อนคำสั่งที่เรียกใช้แอปพลิเคชันที่คุณต้องการดีบัก ตัวอย่างเช่นถ้าคุณมีการเปิดตัว MySQL จากสถานี Cygwin ใช้คำสั่งเรียกว่าแทนที่จะเป็นmysql
strace mysql
หากผลลัพธ์จากการรัน strace บนโปรแกรมแช่แข็งไม่ปรากฏขึ้นโปรดโพสต์ผลลัพธ์ไปที่ pastebin หรือสิ่งที่เทียบเท่า (อย่าพยายามเพิ่มคำตอบของคุณมันจะเป็นข้อความจำนวนมาก)
ขั้นตอนต่อไปคือการเรียกใช้งานด้วยดีบักเกอร์เช่น gdb แต่ในกรณีเช่นนี้มักจะเพียงพอ
ปรับปรุง
เห็นได้ชัดว่ามีข้อผิดพลาดในพอร์ต cygwin ของ strace ในช่วงสองสามเดือนที่ผ่านมา; ต่อการค้นหา google ของ 'cygwin strace seg fault'; ฉันไม่ทราบว่า เนื่องจาก strace เป็นเครื่องมือที่ดีที่สุดสำหรับงานนี้ให้ลองอัปเดตการติดตั้ง cygwin ของคุณเพื่อดูว่าการแก้ไขนั้นได้รับการแนะนำโดยตั้งใจหรือไม่ตั้งใจ เพื่ออัพเดตการติดตั้ง cygwin ของคุณคุณใช้ลำดับคำสั่งต่อไปนี้:
wget -NP /usr/local/bin/ http://cygwin.com/setup-x86_64.exe
chmod u+x /usr/local/bin/setup-x86_64.exe
/usr/local/bin/setup-x86_64.exe -n
แหล่ง
หลังจากอัปเดตลองอีกครั้ง ถ้ามันยังคงแยกกันอยู่สิ่งต่าง ๆ จะมีความยุ่งเหยิงเล็กน้อยเนื่องจาก gdb นั้นใช้งานได้ง่ายกว่ามากและไม่มีอะไรที่เทียบเท่าได้จริงในสภาพแวดล้อม cygwin ที่ฉันรู้อยู่ในขณะนี้
มีโอกาสที่การอัปเดตจะแก้ไขปัญหาการเปิดตัวของคุณอยู่เสมอและ strace กลายเป็นจุดที่สงสัย (ไม่ใช่โอกาสที่ยิ่งใหญ่มาก ... )
อัปเดต 2
หากคำสั่ง cygwin strace segfaults หลังจากอัปเดตฉันคิดว่าทางออกที่ดีที่สุดของคุณคือการใช้ดีบักเกอร์พื้นที่ผู้ใช้ windows ดั้งเดิมเช่น logger.exe ข้อมูลการติดตั้งสามารถพบได้ที่นี่
logger.exe ถูกใช้ในลักษณะที่คล้ายกันเพื่อ strace ปัญหาที่คุณจะได้รับการแปล cygwins ของการเรียกระบบของโปรแกรมที่เปิดเผยไม่ใช่การเรียกระบบจริง กล่าวอีกนัยหนึ่งมันจะดูเฉพาะระบบปฏิบัติการของ cygwin และข้อมูลเฉพาะของโปรแกรมที่กระทำผิดอาจถูกทำให้งงงวย อย่างไรก็ตามการแฮงค์หรือหยุดการทำงานสามารถอ้างได้ว่าเป็นการ จำกัด ทรัพยากรหรือการเรียกระบบที่ไม่ตอบสนองและวิธีการนี้จะเปิดเผย
เนื่องจากฉันเสนอสิ่งนี้เป็นทางเลือกให้กับบางสิ่งบางอย่าง (strace) ที่อาจยังคงใช้ได้หลังจากการอัปเดตฉันจะไม่พูดถึงรายละเอียดที่ดีเกี่ยวกับการใช้งานเฉพาะของมัน โดยพื้นฐานแล้วสิ่งที่คุณจะทำ (ติดตั้งภายหลัง) คือเรียก cygwin จากพรอมต์คำสั่ง windows ซึ่งจัดทำขึ้นโดยโปรแกรม logger.exe เช่นเดียวกับที่ฉันอธิบาย strace เทอร์มินัล cygwin แบบโต้ตอบจะเปิดขึ้นและคุณต้องเปิดโปรแกรมที่คุณกำลังประเมินจากนั้น มีข้อความจำนวนมาก (ควร) เอาท์พุทโดยแอปพลิเคชันตัวบันทึกอธิบายสิ่งที่ cygwin และเป็นกระบวนการลูก "โปรแกรมของคุณ" กำลังทำ เมื่อแฮงค์เกิดขึ้นการเรียกของระบบเฉพาะหรือทรัพยากรที่กำลังรออยู่ควรปรากฏให้เห็นชัดเจน ถ้าไม่ใช่ให้โพสต์ข้อความแบบเต็มของเอาต์พุตตัวบันทึก
chere
) สาเหตุหลักคือมินต์นั้นจำเป็นต้องเปิดตัวในฐานะผู้ดูแลระบบ อัปเดตทางลัดของฉันเพื่อรวมตัวเลือก "Run as administrator" ไว้ให้ฉัน