strace เป็นซอฟต์แวร์แบบโอเพ่นซอร์สและแจกจ่ายได้อย่างอิสระที่ออกแบบมาสำหรับนักพัฒนาซอฟต์แวร์และผู้ดูแลระบบโดยให้ตัวติดตามการเรียกค้นระบบที่ติดตั้งใน C และออกแบบมาเพื่อใช้งานเฉพาะภายใต้ระบบปฏิบัติการ GNU / Linux
โปรแกรมมีประโยชน์มากสำหรับการแก้จุดบกพร่องยูทิลิตีการเรียนการสอนและการวินิจฉัยที่สามารถรวบรวมการเรียกระบบทั้งหมดที่สร้างขึ้นโดยโปรแกรมหรือกระบวนการและพิมพ์ข้อมูลการสืบค้นกลับ เป็นโปรแกรมบรรทัดคำสั่งที่สามารถใช้งานได้จากระบบคอนโซลหรือผ่านทางโปรแกรมจำลองเทอร์มินัล
เครื่องมือนี้สามารถใช้โดยเครื่องมือวินิจฉัยปัญหารวมถึงผู้ดูแลระบบที่ต้องการโซลูชันล้ำค่าสำหรับการแก้ปัญหาเกี่ยวกับโปรแกรมแหล่งที่มาแบบปิด เขียนโดย Dmitry V. Levin, Roland McGrath และ Wichert Akkerman
ตัวเลือกบรรทัดคำสั่ง
เช่นเดียวกับซอฟต์แวร์บรรทัดคำสั่งอื่น ๆ strace มีตัวเลือกบรรทัดคำสั่งมากมายให้ผู้ใช้สามารถใช้งานฟังก์ชันและคุณลักษณะทั้งหมดได้อย่างง่ายดายเพื่อให้บรรลุผลงานของพวกเขา คุณสามารถดูตัวเลือกบรรทัดคำสั่งทั้งหมดได้อย่างรวดเร็วโดยเรียกใช้ & quot; strace --help & rsquo; คำสั่ง.
ในบรรดาตัวเลือกบรรทัดคำสั่งที่น่าสนใจที่สุดเราสามารถพูดถึงการสนับสนุนสำหรับการนับครั้งการโทรและข้อผิดพลาดในแต่ละ syscall การสนับสนุนสำหรับการสรุปค่าแฝง syscall สนับสนุนการติดตามการเข้าถึงเส้นทางบางอย่างการสนับสนุนสำหรับการเปิดใช้งานการแก้ปัญหาเอาต์พุตไปยัง stderr, เช่นเดียวกับการสนับสนุนการเรียกใช้กระบวนการสืบค้นข้อมูลเป็นหลานคนเดียวไม่ได้เป็นผู้ปกครอง
นอกจากนี้คุณจะสามารถส่งข้อมูลการสืบค้นกลับไปยังไฟล์ที่ระบุแทน stderr เพื่อตั้งค่าใช้จ่ายสำหรับการติดตาม syscalls ไปยัง usecs ค่าใช้จ่ายเพื่อตั้งค่าไฟล์ PID สำหรับกระบวนการสืบค้นข้อมูลเพื่อจำกัดความยาวของสตริงการพิมพ์ เพื่อใช้คำสั่ง strsize chars เพื่อเรียกใช้คำสั่งชื่อผู้ใช้จัดการ setgid และ / หรือ setuid และแยกออกจาก syscall ที่เฉพาะเจาะจง
เริ่มต้นกับ strace
strace มีการแจกจ่ายเฉพาะเป็น tarball ต้นทาง แต่สามารถติดตั้งได้ง่ายจากการกระจาย Linux จำนวนมากจากที่เก็บซอฟต์แวร์หลักของตน หากต้องการติดตั้งจากแหล่งข้อมูลเพียงดาวน์โหลดเวอร์ชันล่าสุดจาก Softoware เก็บข้อมูลที่จัดเก็บไว้ในตำแหน่งที่คุณเลือกและแกะออก
เปิดแอป Terminal จากตำแหน่งของไฟล์ที่แยกแล้ว (เช่น cd /home/softoware/strace-4.9) เรียกใช้ ./configure && make & rsquo; คำสั่งเพื่อกำหนดค่าและรวบรวมข้อมูล strace จากนั้นรันคำสั่ง & lsquo; make install & rsquo; คำสั่งเป็น root หรือ & lsquo; sudo make install & rsquo;
มีอะไรใหม่ ในรุ่นนี้:
- การปรับปรุง:
- เพิ่ม --yy ตัวเลือกในการพิมพ์โปรโตคอลและข้อมูลที่อยู่ที่เกี่ยวข้องกับตัวบ่งชี้ซ็อกเก็ต
- อ่านต่อ & quot; e read = set & quot; และ & quot; -e write = set & quot; ตัวเลือกเพื่อครอบคลุม sendmsg, recvmsg, sendmmsg และ recvmmsg syscalls
- ดำเนินการถอดรหัสคำสั่ง ioctl แบบ 32 บิตแบบเต็มรูปแบบ (ระบุข้อบกพร่องของ Debian # 692913 และข้อผิดพลาด Fedora # 902788)
- ดำเนินการสนับสนุน API PTRACE_GETREGS ในวันที่ 64 ปี
- ใช้การสนับสนุน API PTRACE_GETREGS บน mips
- ดำเนินการสนับสนุน PTRACE_GETREGSET API ใน s390 / s390x
- ดำเนินการถอดรหัสระบบคอมพริชัน getrandom และ seccomp
- ดำเนินการถอดรหัสเต็มรูปแบบของชุดความสามารถแบบ 64 บิต
- ดำเนินการถอดรหัสคำสั่ง prctl ทั้งหมด
- ดำเนินการถอดรหัสคำสั่ง parametrized ioctl
- ดำเนินการถอดรหัสคำสั่ง evoev ioctl
- ดำเนินการถอดรหัสคำสั่ง ioctl v4l
- ดำเนินการถอดรหัสคำสั่ง ioctl SG_IO v4
- ดำเนินการถอดรหัสคำสั่ง ioctl ของ FIFREEZE / FITHAW / FITRIM
- ดำเนินการถอดรหัส FALLOC_FL_ * flag ตกใจ
- ดำเนินการถอดรหัสของหน้ากากสัญญาณ rt_sigreturn ใน aarch64, x32 และ x86_64
- ตัวถอดรหัสซ็อกเก็ตที่ปรับปรุงเพื่อสนับสนุนซ็อกเก็ตบลูทู ธ
- การถอดรหัสที่เพิ่มขึ้นของคำสั่ง ioctl ที่ไม่แสดง
- การถอดรหัสที่เพิ่มขึ้นของ getsockopt และ setsockopt syscall
- การถอดรหัสที่เพิ่มขึ้นของ sysinfo syscall
- การถอดรหัสที่เพิ่มขึ้นของ struct cmsghdr
- การถอดรหัสสถานะรอที่ดีขึ้น
- การสนับสนุน aio ที่ปรับปรุงแล้วในสถาปัตยกรรมที่ไม่ใช่ x86 โดยใช้ libaio.h ภายนอก
- เพิ่ม O_TMPFILE ในรายการแฟล็กโหมดเปิดที่รู้จัก
- อัปเดตรายการค่าคงที่ของระบบไฟล์ที่ใช้ในการถอดรหัส statys ครอบครัวของ statfs
- อัปเดตรายการ CAP_ *, PR_ *, PTRACE_ *, SCHED_ *, SO_ *, SOL_ *, SWAP_FLAG_ * และค่าคงที่ของ TFD_ * แล้ว
- อัปเดตรายการค่าคงที่สัญญาณจาก Linux 3.19 แล้ว
- อัปเดตรายการค่าคงที่ errno จาก Linux 3.19
- อัปเดตรายการคำสั่ง ioctl จาก Linux 3.9 แล้ว
- เพิ่มรายการ syscall ใหม่เพื่อให้ตรงกับ Linux 3.19
- การแก้ไขข้อบกพร่อง:
- แก้ไขข้อผิดพลาดต่างๆในการทำแผนที่ระหว่างหมายเลข syscall และข้อมูลที่เกี่ยวข้องเช่นจำนวนอาร์กิวเมนต์ syscall ชื่อ syscall และตัวถอดรหัส syscall
- แก้ไขปัญหาการอ้างอิงใน descriptors การพิมพ์ชื่อไฟล์ชื่อเครือข่ายอินเตอร์เฟสชื่อ struct utsname ชื่ออุปกรณ์ / ปริมาณของคำสั่ง BLK * ioctl
- แก้ไขการถอดรหัส uid_t / git_t
- แก้ไขปัญหาที่อยู่นอกขอบเขตของปัญหาในตัวถอดรหัส getdents / getdents64
- แก้ไขการตัดทอนธงที่เปิดโอกาสในสถาปัตยกรรมบางอย่าง
- แก้ไขการถอดรหัสของ struct ifreq.ifr_name
- แก้ไขการถอดรหัสคำสั่ง ioctl SIOCSIFNAME
- แก้ไขการถอดรหัส RENAME_ * renameat2 flags
- แก้ไขการถอดรหัสโครงสร้างเวลาแบบ UTIME_NOW / UTIME_OMIT
- แก้ไขการถอดรหัส subcalls ipc ทางอ้อมบนสถาปัตยกรรมบางส่วน
- แก้ไขการถอดรหัสของ fanotify_mark syscall ในสถาปัตยกรรม 32 บิต
- แก้ไขการถอดรหัสโครงสร้างโครงสร้างแบบ 32 บิตบนสถาปัตยกรรม 64 บิต
- แก้ไขการถอดรหัส cmsghdr โครงสร้างแบบ 32 บิตบนสถาปัตยกรรม 64 บิต
- แก้ไขการถอดรหัส preadv / pwritev 32 บิตสำหรับสถาปัตยกรรม 64 บิต
- แก้ไขการถอดรหัสของหน้าปัดสัญญาณ sigreturn / rt_sigreturn บน ia64, ppc, ppc64, sparc, sparc64, mips และ s390
- เอาต์พุตตัวชี้คำสั่งคงที่ (-i option) บนสถาปัตยกรรมที่สนับสนุนหลายบุคลิกภาพ
- แก้ไขพฤติกรรมของ & quot; e read = set & quot; และ & quot; -e write = set & quot; เมื่ออ่านและเขียนชุดตัดกัน
- สร้างคงที่ในระบบที่ struct sigaction ไม่มีสมาชิก sa_restorer
- สร้าง Fixed ด้วย uclibc และ musl libc
- Portability:
- ต้องใช้เคอร์เนลลินุกซ์ & gt; = 2.5.46 รุ่นเก่ากว่าโดยไม่สนับสนุน PTRACE_SETOPTIONS ที่ดีจะไม่ทำงาน
- ใน mips ต้องมี kernel linux & gt; = 2.6.15 รุ่นเก่ากว่าโดยไม่สนับสนุน PTRACE_GETREGS ที่ดีจะไม่ทำงาน
- ใน s390 และ s390x ต้องมี kernel linux & gt; = 2.6.27 รุ่นเก่าที่ไม่มีการสนับสนุน PTRACE_GETREGSET ที่ดีจะไม่ทำงาน
- การเปลี่ยนแปลงพฤติกรรม:
- ปิดใช้งานการสนับสนุน OABI ในระบบ ARM EABI ตามค่าดีฟอลต์เพิ่มตัวเลือก --enable arm armo-oabi เพื่อให้สามารถกำหนดค่าได้ตามเวลา
- การปรับปรุง:
- เพิ่มตัวเลือกการทดลอง -k เพื่อพิมพ์ข้อมูลการสืบค้นกลับของสแต็คหลังจากที่ใช้ syscall ที่สืบค้นแต่ละครั้ง
- เพิ่มตัวเลือก -w เพื่อสร้างสถิติเกี่ยวกับเวลาแฝงของ syscall (ระบุข้อบกพร่องของ Debian # 457497)
- เพิ่มการสนับสนุนสถาปัตยกรรม ARC
- เพิ่มการสนับสนุน PTRACE_GETREGS API บน PowerPC
- รองรับ Bionic libc และ musl libc ที่ได้รับการปรับปรุง
- การติดตามขั้นตอนเกี่ยวกับบุคลิกภาพแบบ x86 ที่เพิ่มขึ้นใน x86_64 และ x32
- การติดตามขั้นตอนบุคลิกภาพของ ARM ที่มีประสิทธิภาพขึ้นบน AArch64
- การตรวจหาบุคลิกภาพ 32 / 64bit ที่มีประสิทธิภาพใน PowerPC
- ดำเนินการถอดรหัสของ add_key, ioprio_get, ioprio_set, kexec_load, keyctl, renameat2 และ request_key syscalls
- การถอดรหัสที่มีประสิทธิภาพของระบบเลือก, pselect และ io_submit
- การถอดรหัสที่เพิ่มขึ้นของ delete_module, fanotify_init, fanotify_mark, fcntl, setdomainname, sethostname, setns และ sync_file_range syscalls
- การถอดรหัสสัญญาณ bitmasks ที่เพิ่มขึ้น
- การถอดรหัสไฟล์ descriptors ที่เพิ่มขึ้น
- การถอดรหัส siginfo_t ที่ปรับปรุงใหม่
- การถอดรหัส PF_NETLINK ที่ปรับปรุงแล้ว
- อัปเดตค่าคงที่ CLOCK_ * (แก้ไขบั๊ก Fedora # 1088455)
- เพิ่มรายการ syscall ใหม่เพื่อให้ตรงกับ Linux 3.16
- การแก้ไขข้อบกพร่อง:
- เพิ่ม shmat และ shmdt ไปยังชุดข้อมูลการทำแผนที่ที่เกี่ยวข้องกับหน่วยความจำ
- แก้ไขการแยกออกจากกระบวนการที่หยุดทำงาน
- แก้ไขการถอดรหัสพัดลมแก้ปัญหาเกี่ยวกับสถาปัตยกรรม 32 บิต
- แก้ไขการถอดรหัสในระบบ preadv และ pwritev
- เลือกการถอดรหัสคงที่สำหรับ glibc ในโหมด _FORTIFY_SOURCE
- แก้ไขการถอดรหัสของ epson_calendar_slccal ด้วยอาร์กิวเมนต์ EPOLL_CTL_DEL
- สร้างช่วงเวลาและข้อขัดแย้ง (แก้ไขบั๊ก Fedora # 993384)
- การแก้ไขเบ็ดเตล็ดในหน้าคู่มือ (ที่อยู่ Debian bug # 725987)
- การเปลี่ยนแปลงพฤติกรรม:
- ในกรณีที่มีการยุติสายพานลำเลียงปกติเมื่อมีการเปลี่ยนเส้นทางการส่งผ่านข้อมูลไปยังท่อให้รัดปิดและรอการสิ้นสุดกระบวนการท่อก่อนออก
- การปรับปรุง:
- ติดตามการใช้งานโดยใช้ API PTRACE_SEIZE (ถ้ามี)
- ดำเนินการตรวจหาบุคลิกภาพกระบวนการของ PTRACE_GETREGSET ที่เชื่อถือได้มากขึ้นบน x86-64 และ x32 (หากมี)
- เพิ่ม -e trace = ตัวเลือกหน่วยความจำสำหรับสืบค้นข้อมูล syscalls ที่เกี่ยวข้องกับการทำแผนที่หน่วยความจำ
- เอกสาร -b ตัวเลือก
- อนุญาตให้มีข้อความสถานะสถานะทางออกที่จะถูกระงับโดยให้ตัวเลือก -q สองครั้ง
- เพิ่มการสนับสนุนสถาปัตยกรรม AArch64 (ระบุข้อบกพร่อง Debian # 693074 และข้อบกพร่อง Fedora # 969858)
- เพิ่มการสนับสนุน OpenRISC 1000, Meta และสถาปัตยกรรม Xtensa
- เพิ่มการสนับสนุนบุคลิกภาพ tilegx สำหรับ Tile
- การสนับสนุนสถาปัตยกรรม NOMMU ที่เพิ่มขึ้น
- การถอดรหัสที่เพิ่มขึ้นของ getdents, mmap, perf_event_open, ptrace และ quotactl syscalls
- เพิ่มรายการ syscall ใหม่เพื่อให้สอดคล้องกับ Linux 3.9
- สร้างรายชื่อชื่อ ioctl จาก Linux 3.9 ขึ้นใหม่
- อัปเดตรายการค่าคงที่ errno แล้ว
- อัปเดตรายการของ AF_ *, MADV_ *, MAP_ *, MSG_ *, MS_ *, PF_ *, PR_ *, PTRACE_O_ * และค่าคงที่ TCP_ *
- ดำเนินการถอดรหัส UIO ioctls
- นำออกซ้ำซ้อน & quot; * 32 & quot; ชื่อ ioctl
- การแก้ไขข้อบกพร่อง:
- แก้ไข ERESTARTNOINTR ที่รั่วไปยังผู้ใช้ในแวดวงโบราณ (แก้ไขบั๊ก Fedora # 659382)
- การแยกวิเคราะห์สายอักขระการแจกจ่ายเคอร์เนล (แก้ไขบั๊ก Debian # 702309)
- แก้ไขการถอดรหัส * xattr syscalls (ระบุข้อบกพร่อง Fedora # 885233)
- จัดการไฟล์ที่มีหมายเลขไอโหนด 64 บิตโดยใช้สายอักขระ 32 บิต (ระบุข้อบกพร่อง Fedora # 912790)
- แก้ไขฟอร์กการสืบค้นข้อมูลบน SPARC
- แก้ไขการถอดรหัสของ fadvise64, fallocate, ftruncate64, io_submit, preadv, pwrite, pwritev, readahead, sigaltstack, sync_file_range, sysctl และ truncate64 syscalls
- แก้ไขประเภทของ syscalls หลายส่วนบนสถาปัตยกรรมที่สนับสนุนส่วนใหญ่
- แก้ไขการถอดรหัสอักขระที่ไม่ใช่ภาษาพื้นเมือง 32 บิต recv [m] msg syscalls
- แก้ไขการถอดรหัส syscalls บุคลิกภาพแบบ 32 บิตหลายแบบบน x32
- แก้ไขการถอดรหัสอาร์กิวเมนต์ syscall ที่ยาวนานบน ARM, MIPS / o32, PowerPC, S390x และสถาปัตยกรรม Tile
- แก้ไขการถอดรหัส semtimedop บน S390x
- แก้ไขการถอดรหัส sram_alloc บน Blackfin
- แก้ไขการสร้างเมื่อ process_vm_readv เป็น stab
- สร้างเวอร์ชันคงที่โดยใช้ libaio.h เก่ากว่านี้
- นี่เป็นเวอร์ชันที่มีเสถียรภาพพร้อมด้วย bugfixes ปกติการสนับสนุนที่เพิ่มขึ้นสำหรับเมล็ด Linux ที่ใหม่และอื่น ๆ การปรับปรุง.
- นี่เป็นเวอร์ชันที่มีเสถียรภาพพร้อมด้วย bugfixes ที่ได้รับการปรับปรุงแล้ว สำหรับ Linux kernel ที่สดใหม่และการปรับปรุงอื่น ๆ รวมถึงวิธีการใหม่ในการทำโคลนส้อมและเวิร์ก syscalls โดยใช้สิ่งอำนวยความสะดวกที่ชัดเจนของ Linux kernel เพื่อติดตามการสร้างเธรดและกระบวนการลูก
- การปรับปรุง:
- ดำเนินการถอดรหัส syscalls linux ใหม่: inotify_init1, recvmmsg.
- ดำเนินการถอดรหัสพื้นฐานของ linux syscalls ใหม่: preadv, pwritev, rt_tgsigqueueinfo, perf_event_open
- การถอดรหัสที่เพิ่มขึ้นของ syscalls ที่เพิ่มเมื่อเร็ว ๆ นี้บนสถาปัตยกรรมที่ไม่ใช่ x86 โดยการแทนที่ตัวถอดรหัสเปลือยกายด้วย parsers ที่ซับซ้อนที่เปิดใช้งานก่อนหน้านี้สำหรับ x86 / x86-64
- ตัวเลือกที่ดำเนินการ -C เพื่อรวมเอาต์พุตปกติและ -c (ที่อยู่ Debian bug # 466196)
- การถอดรหัสที่ดีขึ้นของ syscalls mbind และ mremap
- ตัวเลือกซ็อกเก็ต SOL_PACKET ที่ปรับปรุงแล้วจะถูกถอดรหัส
- สร้างรายชื่อ ioctl ใหม่จากลินุกซ์ 2.6.33
- เพิ่มการสนับสนุนสถาปัตยกรรม TILE
- การแก้ไขข้อบกพร่อง:
- Fixed build with Linux kernel header 2.6.32-rc5 +. (ที่อยู่ Debian bug # 560516 และข้อผิดพลาด Fedora # 539044)
- สร้างถาวรบน mips
- จัดการกับระบบ Linux โดยไม่มี struct statfs64
- แก้ไขหน้ากากสัญญาณการรายงานโดย sigreturn บน powerpc
- แก้ไขบัฟเฟอร์หน่วยความจำล้นในตัวเลือก (แก้ไขข้อบกพร่องของ Fedora # 556678)
- แก้ไขการถอดรหัส ipccall msgsnd โดยทางอ้อม
- แก้ไขการถอดรหัสของ syscalls 64 บิต (ที่อยู่ Debian bug # 570603)
- แก้ไขการถอดรหัส getsockopt บนสถาปัตยกรรมที่ sizeof (ยาว) & gt; sizeof (int) (ที่อยู่ Debian bug # 494844)
- แก้ไขการถอดรหัส epoll_pwait (ที่อยู่ Debian bug # 513014)
- แก้ไขการจัดการหัวข้อที่ถูกฆ่า
มีอะไรใหม่ ในเวอร์ชัน 4.9:
มีอะไรใหม่ ในเวอร์ชัน 4.8:
มีอะไรใหม่ ในเวอร์ชัน 4.7:
มีอะไรใหม่ ในเวอร์ชัน 4.6:
มีอะไรใหม่ ในเวอร์ชัน 4.5.20:
ความคิดเห็นที่ไม่พบ