อ่าน 8 นาที
สเตรซ
strace เป็น ยูทิ ลิตี้ สำหรับ ผู้ใช้ ใน Linux ที่ใช้สำหรับการวินิจฉัย การดีบัก และการให้คำแนะนำมันใช้ในการตรวจสอบและแก้ไขปฏิสัมพันธ์ระหว่าง กระบวนการต่างๆ กับ เคอร์เนลของ Linux...
สเตรซ
| สเตรซ | |
|---|---|
| ผู้เขียนต้นฉบับ | พอล คราเนนเบิร์ก |
| นักพัฒนา | ดมิทรี เลวิน |
| เวอร์ชันเสถียร | 7.1 [ 1 ] |
| เขียนเป็น | C [ 2 ] |
| ระบบปฏิบัติการ | ลินุกซ์ |
| แพลตฟอร์ม | AArch64 , DEC Alpha , ARC , ARM EABI/OABI , AVR32 , Blackfin , C-SKY, HP PA-RISC , IA-32 , IA-64 , LoongArch , Motorola 68k , Imagination META , MicroBlaze , MIPS , Nios II , OpenRISC , Power ISA 32/64 บิต, RISC-V , System/390 / z/Architecture , SuperH 32/64 บิต, SPARC 32/64 บิต, TILE , TILEPro , TILE-Gx , x86-64 , x32 ABI , Xtensa |
| มีจำหน่ายใน | ภาษาอังกฤษ[หมายเหตุ 1 ] |
| พิมพ์ | การดีบัก |
| ใบอนุญาต | LGPL v2.1+ [หมายเหตุ 2 ] [ 4 ] |
| เว็บไซต์ | strace.io |
| ที่เก็บข้อมูล |
|
straceเป็น ยูทิ ลิตี้สำหรับ ผู้ใช้ ใน Linux ที่ใช้สำหรับการวินิจฉัย การดีบักและการให้คำแนะนำมันใช้ในการตรวจสอบและแก้ไขปฏิสัมพันธ์ระหว่างกระบวนการต่างๆกับเคอร์เนลของ Linuxซึ่งรวมถึง การ เรียก ใช้ระบบการ ส่ง สัญญาณและการเปลี่ยนแปลงสถานะของกระบวนการ การทำงานของ strace นั้นเป็นไปได้ด้วยคุณสมบัติของเคอร์เนลที่เรียกว่าptrace
ระบบปฏิบัติการ ที่คล้าย Unixบางระบบมีเครื่องมือวินิจฉัยอื่นๆ ที่คล้ายกับ strace เช่น truss
ประวัติศาสตร์
strace ถูกเขียนขึ้นสำหรับSunOSโดย Paul Kranenburg ในปี 1991 ตามประกาศลิขสิทธิ์ และเผยแพร่ในช่วงต้นปี 1992 ในเล่มที่สามของ comp.sources.sun ไฟล์ README เริ่มต้น มีเนื้อหาดังต่อไปนี้: [ 5 ]
strace(1)เป็นตัวติดตามการเรียกใช้ระบบสำหรับระบบ Sun(tm) คล้ายกับโปรแกรมtrace(1)ที่ Sun จัดหาให้ strace(1)เป็นยูทิลิตี้ที่มีประโยชน์ในการดีบักโปรแกรมที่ไม่มีซอร์สโค้ด ซึ่งน่าเสียดายที่รวมถึงซอฟต์แวร์ระบบที่ Sun จัดหาให้เกือบทั้งหมด
ต่อมา Branko Lankester ได้พอร์ตเวอร์ชันนี้ไปยังLinuxและปล่อยเวอร์ชันของเขาในเดือนพฤศจิกายน พ.ศ. 2535 โดยมีการวางจำหน่ายเวอร์ชันที่สองตามมาในปี พ.ศ. 2536 [ 6 ] [ 7 ] Richard Sladkey ได้รวมเวอร์ชัน strace ที่แยกจากกันเหล่านี้เข้าด้วยกันในปี พ.ศ. 2536 และพอร์ตโปรแกรมไปยังSVR4และSolarisในปี พ.ศ. 2537 [ 8 ]ส่งผลให้เกิด strace 3.0 ซึ่งได้รับการประกาศใน comp.sources.misc ในช่วงกลางปี พ.ศ. 2537 [ 9 ]
นับตั้งแต่ปี 1996 strace ได้รับการดูแลโดย Wichert Akkerman ในช่วงที่เขาดำรงตำแหน่ง การพัฒนา strace ได้ย้ายไปที่CVS และมีการเพิ่ม เวอร์ชันสำหรับFreeBSDและสถาปัตยกรรมต่างๆ บน Linux (รวมถึง ARM, IA-64, MIPS, PA-RISC, PowerPC, s390, SPARC) ในปี 2002 ภาระในการดูแล strace ได้ถูกโอนไปยัง Roland McGrath ตั้งแต่นั้นมา strace ได้รับการสนับสนุนสำหรับสถาปัตยกรรม Linux ใหม่ๆ หลายสถาปัตยกรรม (AMD64, s390x, SuperH) รวมถึงการรองรับสองสถาปัตยกรรมสำหรับบางสถาปัตยกรรม และได้รับการเพิ่มเติมและปรับปรุงมากมายในตัวถอดรหัส syscall บน Linux การพัฒนา strace ได้ย้ายไปที่gitในช่วงเวลานั้น ตั้งแต่ปี 2009 strace ได้รับการดูแลอย่างต่อเนื่องโดย Dmitry Levin ตั้งแต่นั้นมา strace ก็ได้เพิ่มการรองรับสถาปัตยกรรม AArch64, ARC, AVR32, Blackfin, Meta, Nios II, OpenSISC 1000, RISC-V, Tile/TileGx และ Xtensa
เวอร์ชันสุดท้ายของ strace ที่มีโค้ดบางส่วน (เห็นได้ชัดว่าตายแล้ว) [ 10 ]สำหรับระบบปฏิบัติการ ที่ไม่ใช่ Linux คือเวอร์ชัน 4.6 ซึ่งวางจำหน่ายในเดือนมีนาคม พ.ศ. 2554 [ 11 ] ใน strace เวอร์ชัน 4.7 ซึ่งวางจำหน่ายในเดือนพฤษภาคม พ.ศ. 2555 [ 12 ]โค้ดที่ไม่ใช่ Linux ทั้งหมดถูกลบออก[ 13 ]ตั้งแต่ strace เวอร์ชัน 4.13 [ 14 ]โครงการนี้ปฏิบัติตามกำหนดการวางจำหน่ายของเคอร์เนล Linux และตั้งแต่เวอร์ชัน 5.0 [ 15 ] เป็นต้นไป โครงการ นี้ก็ปฏิบัติตามรูปแบบการกำหนดเวอร์ชันของ Linux เช่นกัน
ในปี 2012 strace ยังได้รับการสนับสนุนสำหรับการติดตามเส้นทางและการถอดรหัสเส้นทางตัวอธิบายไฟล์[ 16 ]ในเดือนสิงหาคม 2014 strace 4.9 ได้รับการเผยแพร่[ 17 ] [ 18 ]ซึ่งได้เพิ่มการสนับสนุนสำหรับการพิมพ์การติดตามสแต็ก ในเดือนธันวาคม 2016 [ 19 ] [ 20 ]ได้มีการนำคุณสมบัติ การฉีดข้อผิดพลาดของซิสคอล มาใช้
ประวัติเวอร์ชัน
| เวอร์ชั่น | วันที่วางจำหน่าย | การเปลี่ยนแปลงที่น่าสนใจ |
|---|---|---|
| 6.2 | 26 กุมภาพันธ์ 2023 [ 21 ] | มีการใช้งานระบบแก้ไขการชนกันของคำสั่ง ioctl ระหว่างเทอร์มินัลและเสียงที่ทับซ้อนกัน |
| 6.1 | 12 ธันวาคม 2022 [ 22 ] | ปรับปรุงการถอดรหัสstatxคำสั่ง syscall และ ioctl ในเทอร์มินัล ให้ดียิ่งขึ้น |
| 6.0 | 29 ตุลาคม 2022 [ 23 ] | ปรับปรุงการถอดรหัส คำสั่ง setnssyscall และPTP_*ioctl ให้ดียิ่งขึ้น |
| 5.19 | 12 สิงหาคม 2565 [ 24 ] | เครื่องหมาย "(ลบแล้ว)" ของเส้นทางตัวอธิบายไฟล์ที่ไม่ได้เชื่อมโยงจะไม่ถูกตีความว่าเป็นส่วนหนึ่งของเส้นทางอีกต่อไป การถอดรหัสที่ได้รับการปรับปรุงของarch_prctl, io_uring_register, และprctlsyscalls การถอดรหัสที่ได้รับการปรับปรุงของsiginfo_tโครงสร้าง |
| 5.18 | 18 มิถุนายน 2022 [ 25 ] | |
| 5.17 | 26 มีนาคม 2022 [ 26 ] | เพิ่มการรองรับset_mempolicy_home_nodesyscall ใหม่บน Linux |
| 5.16 | 10 มกราคม 2022 [ 27 ] | เพิ่มการรองรับการพิมพ์ความไม่ตรงกันของบริบท SELinux ( --secontext=mismatchตัวเลือก); เพิ่มการรองรับfutex_waitvsyscall ใหม่บน Linux |
| 5.15 | 1 ธันวาคม 2021 [ 28 ] | |
| 5.14 | 2 กันยายน 2021 [ 29 ] | memfd_secretเพิ่มการรองรับการถอดรหัสระบบ และquotactl_fdคำสั่งเรียก ใหม่ |
| 5.13 | 18 กรกฎาคม 2564 [ 30 ] | มีการใช้งานการรองรับ System Call Vectored ABI บนสถาปัตยกรรม IBM POWER |
| 5.12 | 26 เมษายน 2564 [ 31 ] | เพิ่มการรองรับmount_setattrการถอดรหัส syscall แบบใหม่ |
| 5.11 | 17 กุมภาพันธ์ 2021 [ 32 ] | เพิ่มตัวเลือกสำหรับการแทรกข้อมูลเมื่อเข้า/ออกจาก syscall ( poke_enter=และpoke_exit=พารามิเตอร์ของ--injectตัวเลือก); เพิ่มการสนับสนุนสำหรับepoll_pwait2การถอดรหัส syscall แบบใหม่; ปรับใช้การถอดรหัส คำสั่ง FS_IOC_FS[GS]ETXATTR, FS_IOC{,32}_[GS]ETFLAGS, GPIO_*, SIOCADDMULTI, SIOCDELMULTI, SIOCGIFENCAP, SIOCOUTQNSD, SIOCSIFENCAP, SIOCSIFHWBROADCAST, UBI_IOCRPEB, UBI_IOCSPEB, V4L2_BUF_TYPE_META_CAPTURE, V4L2_BUF_TYPE_META_OUTPUT, และVIDIOC_QUERY_EXT_CTRLioctl |
| 5.10 | 14 ธันวาคม 2020 [ 33 ] | รองรับการติดตามสแต็กสำหรับบุคลิกภาพที่ไม่ใช่แบบเนทีฟเมื่อคอมไพล์ด้วยlibdw; เพิ่มการสนับสนุนสำหรับprocess_madviseการถอดรหัสซิสคอล |
| 5.9 | 24 กันยายน 2020 [ 34 ] | เพิ่มการรองรับclose_rangeการถอดรหัส syscall; เพิ่มการรองรับTEE_*การถอดรหัส ioctl; ดำเนินการถอดรหัส{msg,msq,sem}infoโครงสร้าง{msg,msq,sem}id_dsที่ใช้ในคำสั่ง syscall IPC ของ System V ที่เกี่ยวข้อง |
| 5.8 | 6 สิงหาคม 2563 [ 35 ] | เปลี่ยนแปลงรายการของ syscall ที่ครอบคลุมโดย%processกลุ่มเพื่อให้มี syscall ที่เกี่ยวข้องกับวงจรชีวิตของกระบวนการ: เพิ่มkill, tkill, tgkill, pidfd_send_signal, และลบออก; เพิ่มการสนับสนุนสำหรับการถอดรหัส syscall; เพิ่มการสนับสนุนสำหรับการถอดรหัส ioctl rt_sigqueueinfoarch_prctlunsharefaccessat2LOOP_CONFIGURE |
| 5.7 | 1 มิถุนายน 2020 [ 36 ] | |
| 5.6 | 7 เมษายน 2563 [ 37 ] | เพิ่มชื่อเรียกแทนตัวเลือกแบบยาว พร้อมทั้งความเป็นไปได้ในการระบุตัวเลือกที่แม่นยำยิ่งขึ้นผ่าน ตัวเลือก -e quiet/ --quiet, -e decode-fds/ --decode-fds, --absolute-timestamps, --relative-timestamps, และ--syscall-times; ปรับปรุงสถิติการเรียกใช้ระบบต่างๆ |
| 5.5 | 6 กุมภาพันธ์ 2020 [ 38 ] | |
| 5.4 | 28 พฤศจิกายน 2019 [ 39 ] | |
| 5.3 | 25 กันยายน 2019 [ 40 ] | |
| 5.2 | 12 กรกฎาคม 2562 [ 41 ] | |
| 5.1 | 22 พฤษภาคม 2562 [ 42 ] | |
| 5.0 | 19 มีนาคม 2562 [ 43 ] | |
| 4.26 | 26 ธันวาคม 2018 [ 44 ] | |
| 4.25 | 30 ตุลาคม 2561 [ 45 ] | |
| 4.24 | 14 สิงหาคม 2561 [ 46 ] | |
| 4.23 | 14 มิถุนายน 2561 [ 47 ] | |
| 4.22 | 5 เมษายน 2561 [ 48 ] | |
| 4.21 | 13 กุมภาพันธ์ 2561 [ 49 ] | |
| 4.20 | 13 พฤศจิกายน 2017 [ 50 ] | |
| 4.19 | 5 กันยายน 2560 [ 51 ] | |
| 4.18 | 5 กรกฎาคม 2560 [ 52 ] | |
| 4.17 | 24 พฤษภาคม 2560 [ 53 ] | |
| 4.16 | 14 กุมภาพันธ์ 2560 [ 54 ] | |
| 4.15 | 14 ธันวาคม 2559 [ 55 ] | |
| 4.14 | 4 ตุลาคม 2559 [ 56 ] | |
| 4.13 | 26 กรกฎาคม 2559 [ 57 ] | |
| 4.12 | 31 พฤษภาคม 2559 [ 58 ] | |
| 4.11 | 21 ธันวาคม 2558 [ 59 ] | |
| 4.10 | 6 มีนาคม 2558 [ 60 ] | |
| 4.9 | 15 สิงหาคม 2557 [ 61 ] | |
| 4.8 | 3 มิถุนายน 2556 [ 62 ] | |
| 4.7 | 2 พฤษภาคม 2555 [ 63 ] | โค้ดที่ไม่เกี่ยวข้องกับ Linux ทั้งหมดถูกลบออกแล้ว |
| 4.6 | 15 มีนาคม 2554 [ 64 ] | |
| 4.5.20 | 13 เมษายน 2553 | เพิ่มการรองรับ syscall ใหม่inotify_init1, perf_event_open, preadv, pwritev, recvmmsg, rt_tgsigqueueinfoบน Linux; -Cเพิ่มตัวเลือกที่รวมเอาต์พุตปกติและสรุปเข้าด้วยกัน; เพิ่มการรองรับสถาปัตยกรรม Tile บน Linux |
| 4.5.19 | 21 ตุลาคม 2552 | ส่งต่อการดูแลรักษาให้ Dmitry Levin; ตอนนี้ strace จะสิ้นสุดการทำงานด้วยรหัส/สัญญาณการออกเดียวกันกับโปรแกรมที่ถูกติดตาม (หากโปรแกรมนั้นเริ่มต้นโดย strace); เพิ่มการสนับสนุนสำหรับ syscall ใหม่accept4, dup3, epoll_create1, eventfd2, inotify_init1, pipe2, signalfd4บน Linux; เพิ่มการสนับสนุนสถาปัตยกรรม Blackfin, AVR32 และ CRIS บน Linux |
| 4.5.18 | 28 สิงหาคม 2551 | เพิ่มการรองรับsubpage_protsyscall เฉพาะของ POWER บน Linux |
| 4.5.17 | 21 กรกฎาคม 2551 | -Fแฟล็กดังกล่าวเลิกใช้แล้ว เนื่องจาก-fมีร่องรอยการใช้งานvforkบน Linux มานานแล้ว |
| 4.5.16 | 3 สิงหาคม 2550 | |
| 4.5.15 | 16 มกราคม 2550 | เพิ่มการรองรับสำหรับ*at, inotify*, pselect6, ppollและunsharesyscall ใหม่บน Linux |
| 4.5.14 | 16 มกราคม 2550 | สามารถระบุหมายเลขเรียกระบบได้ใน-eข้อกำหนด |
| 4.5.13 | 3 สิงหาคม 2548 | เพิ่มdescการรองรับกลุ่มการเรียกใช้ระบบ (syscall group) ให้กับ-e trace= |
| 4.5.12 | 8 มิถุนายน 2548 | |
| 4.5.11 | 22 มีนาคม 2548 | |
| 4.5.10 | 13 มีนาคม 2548 | |
| 4.5.9 | 4 กุมภาพันธ์ 2547 | |
| 4.5.8 | 19 ตุลาคม 2547 | ถอดรหัสmbind, [sg]et_mempolicy, waitid, fadvise64{,_64}, และepoll_*syscalls, RTC_*ioctls บน Linux |
| 4.5.7 | 31 สิงหาคม 2547 | |
| 4.5.6 | 12 กรกฎาคม 2547 | เพิ่มการรองรับสถาปัตยกรรม SPARC 64 บิตบน Linux แล้ว |
| 4.5.5 | 27 มิถุนายน 2547 | |
| 4.5.4 | 3 มิถุนายน 2547 | -pจะเชื่อมต่อกับเธรด NPTL ทั้งหมดบน Linux ก็ต่อเมื่อ-fมีการระบุ เท่านั้น |
| 4.5.3 | 16 เมษายน 2547 | เพิ่มการรองรับmq_*syscalls บน Linux แล้ว -pตอนนี้สามารถเชื่อมต่อกับเธรด NPTL ทั้งหมดบน Linux ได้แล้ว |
| 4.5.2 | 1 มีนาคม 2547 | |
| 4.5.1 | 13 พฤศจิกายน 2546 | |
| 4.5 | 24 กันยายน 2546 | ส่งต่อการดูแลรักษาให้ Roland McGrath; เพิ่มการรองรับ x86-64 บน Linux พร้อมการสนับสนุนการติดตามกระบวนการที่เข้ากันได้; เพิ่มการรองรับสถาปัตยกรรม SH และ SH64 บน Linux; -Eเพิ่มตัวเลือก |
| 4.4 | 19 สิงหาคม 2544 | |
| 4.3.1 | 7 เมษายน 2544 | |
| 4.3 | 1 เมษายน 2544 | เพิ่มการรองรับสถาปัตยกรรม HP PA/RISC และ IA-64 บน Linux; เพิ่มการรองรับ syscall UID/GID 32 บิตบน Linux; เพิ่มการรองรับ FreeBSD บน x86 |
| 4.2 | 21 มกราคม พ.ศ. 2543 | เพิ่มการรองรับสถาปัตยกรรม IBM Z บน Linux |
| 4.1 | 26 พฤศจิกายน 2542 | เพิ่มการรองรับสถาปัตยกรรม MIPS บน Linux; strace-graphเพิ่มสคริปต์ |
| 4.0.1 | 25 กรกฎาคม 2542 | |
| 4.0 | 9 กรกฎาคม 2542 | แก้ไขปัญหาการถอดรหัส 64 บิตstruct statบน Linux; การอัปเดต Irix 64; การอัปเดต Solaris |
| 3.99.1 | 9 มิถุนายน 2542 | |
| 3.99 | 27 เมษายน 2542 | ผู้ดูแลใหม่คือ Wichert Akkerman; เพิ่มการรองรับสถาปัตยกรรม IBM POWER, SPARC และ ARM บน Linux; เพิ่มการรองรับ syscall หลายรายการบน Linux |
| 3.1 | 1 มิถุนายน 2539 | เพิ่มการรองรับสถาปัตยกรรม Irix OS, m68k และ DEC Alpha บน Linux; เพิ่มการรองรับ-o!ไวยากรณ์ตัวเลือก; เพิ่มการรองรับคลาส syscall ( file, process); เพิ่มการรองรับ syscall IPC บน Sun OS |
| 3.0 | 9 กรกฎาคม พ.ศ. 2537 [ 65 ] | เวอร์ชันข้ามแพลตฟอร์มเริ่มต้นโดย Richard Sladkey รวมถึงการสนับสนุนสำหรับ-x, -q, -e( trace, abbrev, verbose, raw, signal, read, และwriteตัวกำหนดคุณสมบัติ), -c, -iตัวเลือก |
วิธีใช้งานและคุณสมบัติ
การใช้งานที่พบบ่อยที่สุดคือการเริ่มโปรแกรมโดยใช้ strace ซึ่งจะแสดงรายการการเรียกใช้ระบบที่โปรแกรมทำ วิธีนี้มีประโยชน์หากโปรแกรมเกิดข้อผิดพลาดอย่างต่อเนื่องหรือทำงานไม่เป็นไปตามที่คาดหวัง ตัวอย่างเช่น การใช้ strace อาจเปิดเผยว่าโปรแกรมพยายามเข้าถึงไฟล์ที่ไม่มีอยู่จริงหรือไม่สามารถอ่านได้
อีกทางเลือกหนึ่งคือการใช้-pแฟล็กเพื่อเชื่อมต่อกับกระบวนการที่กำลังทำงานอยู่ ซึ่งมีประโยชน์หากกระบวนการหยุดตอบสนอง และอาจช่วยเปิดเผยได้ เช่น ว่ากระบวนการนั้นกำลังติดขัดขณะพยายามสร้างการเชื่อมต่อเครือข่าย
นอกเหนือจากคุณสมบัติอื่นๆ แล้ว strace ยังรองรับสิ่งต่อไปนี้:
- การระบุตัวกรองของชื่อ syscall ที่ควรติดตาม (ผ่าน
-e trace=ตัวเลือก): ตามชื่อ เช่นclone, fork, vfork ; โดยใช้กลุ่มที่กำหนดไว้ล่วงหน้า เช่น%ipcหรือ%file ; หรือ (ตั้งแต่ strace เวอร์ชัน 4.17) โดยใช้ไวยากรณ์นิพจน์ปกติ เช่น.-e trace=/clock_.* - ระบุรายการเส้นทางที่จะติดตาม (
-P /etc/ld.so.cacheเช่น ) - ระบุรายการตัวระบุไฟล์ที่ควรดัมพ์ข้อมูลการอ่านเขียน (
-e read=และ-e write=ตัวเลือกต่างๆ) - นับเวลาและจำนวนการเรียกใช้ระบบ (syscall) ( มีตัวเลือก
-T,-c,-C, และ-w;-Uตัวเลือก ช่วยให้สามารถพิมพ์ข้อมูลเพิ่มเติม เช่น เวลาการเรียกใช้ระบบขั้นต่ำและสูงสุด) - การพิมพ์เวลาแบบสัมพัทธ์หรือแบบสัมบูรณ์ (
-tและ-rตัวเลือกต่างๆ) - การแก้ไขการทำงานของ syscall ที่กำลังดำเนินการอยู่ ( ตัวเลือก): การแก้ไขค่าส่งคืน ( ตั้งแต่ strace 4.16) และรหัสข้อผิดพลาด ( ตั้งแต่ strace 4.15) ของ syscall ที่ระบุ การแทรกสัญญาณ ( ตั้งแต่ strace 4.16) การหน่วงเวลา ( และตั้งแต่ strace 4.22) และการแก้ไขข้อมูลที่ชี้โดยอาร์กิวเมนต์ของ syscall ( และตั้งแต่ strace 5.11) ในระหว่างการดำเนินการ
-e inject=syscall specification:tampering specification:retval=:error=:signal=:delay_enter=:delay_exit=:poke_enter=:poke_exit= - การดึงข้อมูลเกี่ยวกับตัวระบุไฟล์ (รวมถึงซ็อกเก็ต
-yตัวเลือก;-yyตัวเลือกนี้ให้ข้อมูลเพิ่มเติมบางอย่าง เช่น ที่อยู่ปลายทางสำหรับซ็อกเก็ต เส้นทาง และหมายเลขหลัก/รองของอุปกรณ์สำหรับไฟล์) - แสดงร่องรอยการทำงานของโปรแกรม (strace trace) รวมถึงการแยกสัญลักษณ์ (symbol demangling) (ตั้งแต่ strace เวอร์ชัน 4.21) (
-kตัวเลือกเสริม) - การกรองตามสถานะการส่งคืนของซิสคอล (
-e status=ตัวเลือก; ตั้งแต่ strace 5.2 [หมายเหตุ 3 ] ) - ทำการแปลงรหัสเธรด กระบวนการ กลุ่มกระบวนการ และเซสชันที่ปรากฏในข้อมูลการติดตามไปเป็นเนมสเปซ PID ของ strace (
--pidns-translationตัวเลือก; ตั้งแต่ strace เวอร์ชัน 5.9) - ถอดรหัส ข้อมูลบริบท SELinuxที่เกี่ยวข้องกับกระบวนการ ไฟล์ และตัวอธิบาย (
--secontextตัวเลือก; ตั้งแต่ strace เวอร์ชัน 5.12)
strace รองรับการถอดรหัสอาร์กิวเมนต์ของ คำสั่ง ioctl บางประเภท เช่นBTRFS_* , V4L2_* , DM_* , NSFS_* , MEM* , EVIO* , KVM_*และอื่นๆ อีกหลายประเภท นอกจากนี้ยังรองรับการถอดรหัสโปรโตคอล netlink ต่างๆ ด้วย
เนื่องจาก strace แสดงรายละเอียดเฉพาะการเรียกใช้ระบบเท่านั้น จึงไม่สามารถใช้ตรวจจับปัญหาได้มากเท่ากับตัวดีบักโค้ด เช่นGNU Debugger (gdb) อย่างไรก็ตาม มันใช้งานง่ายกว่าตัวดีบักโค้ด และเป็นเครื่องมือที่มีประโยชน์มากสำหรับผู้ดูแลระบบ นอกจากนี้ นักวิจัยยังใช้ strace เพื่อสร้างร่องรอยการเรียกใช้ระบบสำหรับ การ เล่นซ้ำการเรียกใช้ระบบ ในภายหลัง [ 66 ] [ 67 ] [ 68 ]
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างผลลัพธ์ทั่วไปของstraceคำสั่ง:
user@server:~$ strace ls ... open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3 fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC) getdents64(3, /* 18 entries */, 4096) = 496 getdents64(3, /* 0 entries */, 4096) = 0 close(3) = 0 fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000 write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsAส่วนหนึ่งของข้อความข้างต้นเป็นเพียงตัวอย่างเล็ก ๆ ของผลลัพธ์ที่ได้จากการใช้ strace กับคำสั่ง ' ls ' ซึ่งแสดงให้เห็นว่าไดเร็กทอรีปัจจุบันถูกเปิด ตรวจสอบ และดึงเนื้อหาออกมา และรายชื่อไฟล์ที่ได้จะถูกเขียนไปยังเอาต์พุตมาตรฐาน
เครื่องมือที่คล้ายกัน
ระบบปฏิบัติการต่างๆ มี เครื่องมือ ตรวจสอบการทำงาน อื่นๆ ที่คล้ายคลึงกันหรือเกี่ยวข้อง โดยมีคุณสมบัติที่คล้ายคลึงกันหรือขั้นสูงกว่า บางเครื่องมือ (แม้จะใช้ชื่อเดียวกันหรือคล้ายกัน) อาจใช้กลไกการทำงานที่แตกต่างกันโดยสิ้นเชิง ส่งผลให้มีชุดคุณสมบัติหรือผลลัพธ์ที่แตกต่างกัน เครื่องมือดังกล่าวได้แก่:
- Linuxมีltraceที่สามารถติดตามการเรียกใช้ไลบรารีและระบบ, xtraceที่สามารถติดตามโปรแกรมX Window System [ 69 ] SystemTap , perfและtrace-cmdและKernelSharkที่ขยายftrace
- AIXมีคำสั่งtruss ให้ใช้งาน
- HP-UXมีคำสั่งTusc ให้ใช้งาน
- Solaris / Illumosมีโครงสร้างแบบ Truss และDTrace
- UnixWareมีคำสั่งtruss ให้ใช้งาน
- FreeBSDมี คำสั่ง truss , ktraceและDTrace ให้ใช้งาน
- NetBSDมีโปรแกรม ktraceและ DTrace ให้ใช้งาน
- OpenBSDใช้ktraceและ kdump
- macOSมีktrace (เวอร์ชัน 10.4 และก่อนหน้า), DTrace (จาก Solaris) และ dtruss ที่เกี่ยวข้องในเวอร์ชัน 10.5 และหลังจากนั้น[ 70 ]
- Microsoft Windowsมีโปรแกรมยูทิลิตี้ที่คล้ายกันชื่อ StraceNT ซึ่งเขียนโดย Pankaj Garg [ 71 ]และ โปรแกรมยูทิลิตี้แบบ GUI ที่คล้ายกัน ชื่อProcess Monitor ซึ่ง พัฒนาโดยSysinternals
ดูเพิ่มเติม
หมายเหตุ
- ^อย่างไรก็ตาม การถอดรหัสข้อความแสดงข้อผิดพลาดของระบบจะดำเนินการตามภาษาท้องถิ่นปัจจุบันตั้งแต่ strace 4.22 เป็นต้นไป [ 3 ]
- ^ชุดทดสอบนี้ได้รับอนุญาตภายใต้ GPL v2.0 +
- ^ตัวเลือก "แสดงเฉพาะการเรียกใช้งานที่สำเร็จ"
-z(option) ถูกเพิ่มเข้ามาใน strace เวอร์ชัน 4.5 แต่ไม่เคยมีการบันทึกไว้ในเอกสาร เนื่องจากใช้งานไม่ได้อย่างถูกต้อง
ลิงก์ภายนอก
- หน้าโครงการ strace
- หน้าคู่มือ
- บทความรีวิวระบบปฏิบัติการเกี่ยวกับ strace
- "การติดตามการเรียกใช้ระบบด้วย strace"การบรรยายสรุปภาพรวมของฟีเจอร์และการใช้งาน strace โดยMichael Kerriskในงาน NDC TechTown 2018
- "STrace สมัยใหม่" ( แหล่งที่มา ) การบรรยายสรุปภาพรวมคุณสมบัติของ STrace โดย Dmitry Levin ในงาน DevConf.cz 2019
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สเตรซ
strace เป็น ยูทิ ลิตี้ สำหรับ ผู้ใช้ ใน Linux ที่ใช้สำหรับการวินิจฉัย การดีบัก และการให้คำแนะนำมันใช้ในการตรวจสอบและแก้ไขปฏิสัมพันธ์ระหว่าง กระบวนการต่างๆ กับ เคอร์เนลของ Linux...
ประวัติศาสตร์
strace ถูกเขียนขึ้นสำหรับ SunOS โดย Paul Kranenburg ในปี 1991 ตามประกาศลิขสิทธิ์ และเผยแพร่ในช่วงต้นปี 1992 ในเล่มที่สามของ comp.sources.sun ไฟล์ README เริ่มต้น มีเนื้อหาดังต่อไปนี้: [ 5 ]
ประวัติเวอร์ชัน
เวอร์ชั่น วันที่วางจำหน่าย การเปลี่ยนแปลงที่น่าสนใจ 6.2 26 กุมภาพันธ์ 2023 [ 21 ] มีการใช้งานระบบแก้ไขการชนกันของคำสั่ง ioctl ระหว่างเทอร์มินัลและเสียงที่ทับซ้อนกัน 6.
วิธีใช้งานและคุณสมบัติ
การใช้งานที่พบบ่อยที่สุดคือการเริ่มโปรแกรมโดยใช้ strace ซึ่งจะแสดงรายการการเรียกใช้ระบบที่โปรแกรมทำ วิธีนี้มีประโยชน์หากโปรแกรมเกิดข้อผิดพลาดอย่างต่อเนื่องหรือทำงานไม่เป็นไปตามที่คาดหวัง ตัวอย่างเช่น การใช้ strace...