帮老丁调试他的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, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 \322\30\0074\0\0\0"..., 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, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\20d\206\0004\0\0\0"..., 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, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`&\1\0024\0\0\0"..., 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, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320/s\0004\0\0\0"..., 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的已经在运行的进程。
来源:https://www.cnblogs.com/moonflow/archive/2012/04/21/2461675.html