strace の -k オプションでスタックトレースを出す - 2023 Ubuntu Jammy 版

以前こんなエントリを書いていた

hiboma.hatenadiary.jp

strace で -k を指定すると システムコール呼び出しのスタックトレースを採取できるのを知った。v4.9 から使える experimental 扱いのオプション

という内容のエントリでした。


 

しかしながら

CentOS7.4 の strace-4.12-4.el7 ではサポートされていない機能だ。ざんねーん ちなみに Ubuntu Xenial もだめだー。とほほー

当時、私が業務で扱っていた Linux ディストリビューションではサポートされていなかったのでした。


で、この内容を改めて思い出して、 Ubuntu Jammy で strace -k を試してみたら 動く!

hiboma@vps:~$ strace -k -P /etc/passwd -y id
openat(AT_FDCWD</home/hiboma>, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 3</etc/passwd>
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__open64_nocancel+0x4c) [0x119bcc]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_open+0xd5) [0x8c1e5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_fopen+0x292) [0x8c492]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(fopen+0x7e) [0x7f72e]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x12) [0x154e32]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683]
 > /usr/bin/id() [0x621e]
 > /usr/bin/id() [0x2fc5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40]
 > /usr/bin/id() [0x32e5]
newfstatat(3</etc/passwd>, "", {st_mode=S_IFREG|0644, st_size=1889, ...}, AT_EMPTY_PATH) = 0
 > /usr/lib/x86_64-linux-gnu/libc.so.6(fstatat+0xe) [0x113eee]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_doallocate+0x63) [0x7ebf3]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_doallocbuf+0x50) [0x8dd60]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_seekoff+0x135) [0x8aa95]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(fseeko+0x63) [0x88d53]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x2c) [0x154e4c]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683]
 > /usr/bin/id() [0x621e]
 > /usr/bin/id() [0x2fc5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40]
 > /usr/bin/id() [0x32e5]
lseek(3</etc/passwd>, 0, SEEK_SET)      = 0
 > /usr/lib/x86_64-linux-gnu/libc.so.6(llseek+0xb) [0x114acb]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_seekoff+0x22d) [0x8ab8d]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(fseeko+0x63) [0x88d53]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_files_fopen+0x2c) [0x154e4c]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x3e) [0x15ab4e]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683]
 > /usr/bin/id() [0x621e]
 > /usr/bin/id() [0x2fc5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40]
 > /usr/bin/id() [0x32e5]
read(3</etc/passwd>, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1889
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__read_nocancel+0x8) [0x119cd8]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_underflow+0x186) [0x8ccb6]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_default_uflow+0x36) [0x8de16]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_getline_info+0xac) [0x8049c]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(fgets_unlocked+0x45) [0x8a3b5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__nss_readline+0x4b) [0x154ecb]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0x82) [0x15ab92]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683]
 > /usr/bin/id() [0x621e]
 > /usr/bin/id() [0x2fc5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40]
 > /usr/bin/id() [0x32e5]
close(3</etc/passwd>)                   = 0
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__close_nocancel+0xb) [0x119a1b]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_file_close_it+0x70) [0x8bf80]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_IO_fclose+0x11f) [0x7ee0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(_nss_files_getpwuid_r+0xd5) [0x15abe5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid_r+0x11f) [0xe9e0f]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(getpwuid+0xa3) [0xe9683]
 > /usr/bin/id() [0x621e]
 > /usr/bin/id() [0x2fc5]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_init_first+0x90) [0x29d90]
 > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80) [0x29e40]
 > /usr/bin/id() [0x32e5]
uid=1000(hiboma) gid=1000(hiboma) groups=1000(hiboma),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
+++ exited with 0 +++

やったー! すぐにつかえる!

動作環境

hiboma@vps:~$ uname -a
Linux vps 5.15.0-60-generic #66-Ubuntu SMP Fri Jan 20 14:29:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
hiboma@vps:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:    22.04
Codename:   jammy
hiboma@vps:~$ 

感想

  • 見慣れないオプションがたくさんあるから もうちょい調べてみたい
  • 最近は strace 使ってあれこれ調べるって機会、減ったなぁ