Linux strace解决段问题
发布时间:2021-11-25 18:14:06 所属栏目:PHP教程 来源:互联网
导读:帮老丁调试他的xfa程序,这个程序有段错误。用gdb调试,bt查看堆栈信息的时候可以比较明确地定位到几个函数去,但是懒得去一步步查看。想起strace来跟踪一下系统调用。 strace -f -o generateallxfa.strace ./generateallxfa -ruleno 1 -rulefile ./experime
帮老丁调试他的xfa程序,这个程序有段错误。用gdb调试,bt查看堆栈信息的时候可以比较明确地定位到几个函数去,但是懒得去一步步查看。想起strace来跟踪一下系统调用。 strace -f -o generateallxfa.strace ./generateallxfa -ruleno 1 -rulefile ./experiment/ftp-refined.re 1) processing regex:: <.*[sS][iI][tT][eE]#.*[cC][hH][mM][oO][dD]> <set_only_bit> [root@localhost XFA]# cat generateallxfa.strace 9224 execve("./generateallxfa", ["./generateallxfa", "-ruleno", "1", "-rulefile", "./experiment/ftp-refined.re"], [/* 36 vars */]) = 0 9224 brk(0) = 0x869b000 9224 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) 9224 open("/etc/ld.so.cache", O_RDONLY) = 3 9224 fstat64(3, {st_mode=S_IFREG|0644, st_size=57735, ...}) = 0 9224 mmap2(NULL, 57735, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fdf000 9224 close(3) = 0 9224 open("/usr/lib/libstdc++.so.6", O_RDONLY) = 3 9224 read(3, "177ELF111 3 3 1 32230 074 "..., 512) = 512 9224 fstat64(3, {st_mode=S_IFREG|0666, st_size=964412, ...}) = 0 9224 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fde000 9224 mmap2(0x7146000, 985260, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7146000 9224 mmap2(0x722c000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe6) = 0x722c000 9224 mmap2(0x7231000, 22700, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7231000 9224 close(3) = 0 9224 open("/lib/libm.so.6", O_RDONLY) = 3 9224 read(3, "177ELF111 3 3 1 20d206 004 "..., 512) = 512 9224 fstat64(3, {st_mode=S_IFREG|0755, st_size=208352, ...}) = 0 9224 mmap2(0x863000, 155760, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x863000 9224 mmap2(0x888000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x24) = 0x888000 9224 close(3) = 0 9224 open("/lib/libgcc_s.so.1", O_RDONLY) = 3 9224 read(3, "177ELF111 3 3 1 `&1 024 "..., 512) = 512 9224 fstat64(3, {st_mode=S_IFREG|0755, st_size=46476, ...}) = 0 9224 mmap2(0x2011000, 48036, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2011000 9224 mmap2(0x201c000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xa) = 0x201c000 9224 close(3) = 0 9224 open("/lib/libc.so.6", O_RDONLY) = 3 9224 read(3, "177ELF111 3 3 1 320/s 004 "..., 512) = 512 9224 fstat64(3, {st_mode=S_IFREG|0755, st_size=1606808, ...}) = 0 9224 mmap2(0x71d000, 1324452, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x71d000 9224 mmap2(0x85b000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13e) = 0x85b000 9224 mmap2(0x85e000, 9636, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x85e000 9224 close(3) = 0 9224 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fdd000 9224 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7fddad0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 9224 mprotect(0x85b000, 8192, PROT_READ) = 0 9224 mprotect(0x888000, 4096, PROT_READ) = 0 9224 mprotect(0x722c000, 16384, PROT_READ) = 0 9224 mprotect(0x719000, 4096, PROT_READ) = 0 9224 munmap(0xb7fdf000, 57735) = 0 9224 brk(0) = 0x869b000 9224 brk(0x86bc000) = 0x86bc000 9224 open("./experiment/ftp-refined.re", O_RDONLY) = 3 9224 fstat64(3, {st_mode=S_IFREG|0766, st_size=596, ...}) = 0 9224 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fed000 9224 read(3, ".*[sS][iI][tT][eE]#.*[cC][hH][mM"..., 4096) = 596 9224 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 9224 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fec000 9224 write(1, "1) processing regex:: <.*[sS][iI"..., 81) = 81 9224 brk(0x86dd000) = 0x86dd000 9224 brk(0x86fe000) = 0x86fe000 9224 brk(0x871f000) = 0x871f000 9224 brk(0x8740000) = 0x8740000 9224 brk(0x8761000) = 0x8761000 9224 brk(0x8782000) = 0x8782000 9224 brk(0x87a3000) = 0x87a3000 9224 brk(0x87c4000) = 0x87c4000 9224 brk(0x87e5000) = 0x87e5000 9224 brk(0x8806000) = 0x8806000 9224 brk(0x8827000) = 0x8827000 9224 brk(0x8848000) = 0x8848000 9224 brk(0x8869000) = 0x8869000 9224 brk(0x888a000) = 0x888a000 9224 brk(0x88ab000) = 0x88ab000 9224 brk(0x88cc000) = 0x88cc000 9224 brk(0x88ed000) = 0x88ed000 9224 brk(0x890e000) = 0x890e000 9224 brk(0x892f000) = 0x892f000 9224 brk(0x8950000) = 0x8950000 9224 brk(0x8971000) = 0x8971000 9224 brk(0x8992000) = 0x8992000 9224 brk(0x89b3000) = 0x89b3000 9224 brk(0x89d4000) = 0x89d4000 9224 brk(0x89f5000) = 0x89f5000 9224 brk(0x8a16000) = 0x8a16000 9224 brk(0x8a37000) = 0x8a37000 9224 brk(0x8a58000) = 0x8a58000 9224 brk(0x8a79000) = 0x8a79000 9224 brk(0x8a9a000) = 0x8a9a000 9224 brk(0x8abb000) = 0x8abb000 9224 brk(0x8adc000) = 0x8adc000 9224 brk(0x8afd000) = 0x8afd000 9224 brk(0x8b1e000) = 0x8b1e000 9224 brk(0x8b3f000) = 0x8b3f000 9224 brk(0x8b60000) = 0x8b60000 9224 brk(0x8b81000) = 0x8b81000 9224 brk(0x8ba2000) = 0x8ba2000 9224 brk(0x8bc3000) = 0x8bc3000 9224 brk(0x8be4000) = 0x8be4000 9224 brk(0x8c05000) = 0x8c05000 9224 brk(0x8c26000) = 0x8c26000 9224 brk(0x8c47000) = 0x8c47000 9224 brk(0x8c68000) = 0x8c68000 9224 brk(0x8c89000) = 0x8c89000 9224 brk(0x8caa000) = 0x8caa000 9224 brk(0x8ccb000) = 0x8ccb000 9224 brk(0x8cec000) = 0x8cec000 9224 brk(0x8d0d000) = 0x8d0d000 9224 brk(0x8d2e000) = 0x8d2e000 9224 brk(0x8d4f000) = 0x8d4f000 9224 brk(0x8d70000) = 0x8d70000 9224 brk(0x8d91000) = 0x8d91000 9224 brk(0x8db2000) = 0x8db2000 9224 brk(0x8dd3000) = 0x8dd3000 9224 brk(0x8df4000) = 0x8df4000 9224 brk(0x8e15000) = 0x8e15000 9224 brk(0x8e36000) = 0x8e36000 9224 brk(0x8e57000) = 0x8e57000 9224 brk(0x8e78000) = 0x8e78000 9224 brk(0x8e99000) = 0x8e99000 9224 brk(0x8eba000) = 0x8eba000 9224 brk(0x8edb000) = 0x8edb000 9224 brk(0x8efc000) = 0x8efc000 9224 brk(0x8f1d000) = 0x8f1d000 9224 brk(0x8f3e000) = 0x8f3e000 9224 brk(0x8f5f000) = 0x8f5f000 9224 brk(0x8f80000) = 0x8f80000 9224 brk(0x8fa1000) = 0x8fa1000 9224 brk(0x8fc2000) = 0x8fc2000 9224 brk(0x8fe3000) = 0x8fe3000 9224 brk(0x9004000) = 0x9004000 9224 brk(0x9025000) = 0x9025000 9224 brk(0x9046000) = 0x9046000 9224 brk(0x9067000) = 0x9067000 9224 brk(0x9088000) = 0x9088000 9224 brk(0x90a9000) = 0x90a9000 9224 brk(0x90ca000) = 0x90ca000 9224 brk(0x90eb000) = 0x90eb000 9224 brk(0x910c000) = 0x910c000 9224 brk(0x912d000) = 0x912d000 9224 brk(0x914e000) = 0x914e000 9224 brk(0x916f000) = 0x916f000 9224 brk(0x9190000) = 0x9190000 9224 brk(0x91b1000) = 0x91b1000 9224 brk(0x91d2000) = 0x91d2000 9224 brk(0x91f3000) = 0x91f3000 9224 brk(0x9214000) = 0x9214000 9224 brk(0x9235000) = 0x9235000 9224 brk(0x9256000) = 0x9256000 9224 brk(0x9277000) = 0x9277000 9224 brk(0x9298000) = 0x9298000 9224 brk(0x92b9000) = 0x92b9000 9224 brk(0x92da000) = 0x92da000 9224 brk(0x92fb000) = 0x92fb000 9224 time(NULL) = 1313917094 9224 brk(0x931c000) = 0x931c000 9224 time(NULL) = 1313917094 9224 open("debug/1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory) 9224 --- SIGSEGV (Segmentation fault) @ 0 (0) --- 9224 +++ killed by SIGSEGV +++ 红色部分可以清晰地看到缺少这个debug/1导致的,极有可能是debug目录不存在,但是看了下发现debug目录还是存在的,只是名字竟然叫Debug Linux下面区分大小写,导致没有directory。这也是因为老丁拿到的代码是在cygwin下的。 附上strace用法: strace命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。将跟踪信息发送到应用程序及内核开发者都很有用。 strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。 下面记录几个常用 option . 1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程 2 -o xxx.txt 输出到某个文件。 3 -e execve 只记录 execve 这类系统调用 4 -o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。 5 -p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。 使用上述三个参数基本上就可以完成大多数调试任务了,下面举几个命令行例子: truss -o ls.truss ls -al: 跟踪ls -al的运行,将输出信息写到文件/tmp/ls.truss中。 strace -f -o vim.strace vim: 跟踪vim及其子进程的运行,将输出信息写到文件vim.strace。 ltrace -p 234: 跟踪一个pid为234的已经在运行的进程。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |