From: http://blog.chinaunix.net/u1/42574/showart_489928.html
Solaris下调试程序方法:使用truss
truss 介绍
solaris下的truss跟linux下的strace功能一样,用来跟踪系统/库函数调用和系统接收到的信号。并把函数调用跟信号发送到标准出错上。
truss 使用方法
truss -a -e -f -rall -wall -p
truss -a -e -f -rall -wall
-a 显示传递给exec函数的参数
-e 显示传递给exec函数的环境变量
-f 显示子进程
-rall 显示所有读取的数据(默认32bytes)
-wall 显示所有写的数据(默认32bytes)
-p Hook到一个已存在的进程(必须是进程的所有者或者root)
-d 显示跟踪进程运行的时间
<program> 指定要运行的程序
truss 例子
# truss -rall -wall -f -p <PID>
# truss -rall -wall lsnrctl start
# truss -aef lsnrctl dbsnmp_start
0
# truss -d date
Base time stamp: 1066157908.5731 [ Tue Oct 14 14:58:28 EDT 2003 ]
0.0000 execve("/usr/bin/date", 0xFFBEF29C, 0xFFBEF2A4) argc = 1
0.0449 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFF3A0000
0.0453 resolvepath("/usr/lib/ld.so.1", "/usr/lib/ld.so.1", 1023) = 16
0.0457 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0460 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0463 fstat(3, 0xFFBEE9C4) = 0
0.0464 mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF390000
0.0466 mmap(0x00000000, 794624, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF280000
0.0470 mmap(0xFF33A000, 24652, PROT_READ|PROT_WRITE|PROT_EXEC,MAP_PRIVATE|MAP_FIXED, 3, 696320) = 0xFF33A000
0.0474 munmap(0xFF32A000, 65536) = 0
0.0479 memcntl(0xFF280000, 113332, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
0.0481 close(3) = 0
0.0483 open("/usr/lib/libdl.so.1", O_RDONLY) = 3
0.0485 fstat(3, 0xFFBEE9C4) = 0
0.0487 mmap(0xFF390000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED,3, 0) = 0xFF390000
0.0490 close(3) = 0
0.0493 open("/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1", O_RDONLY) = 3
0.0496 fstat(3, 0xFFBEE854) = 0
0.0497 mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF380000
0.0500 mmap(0x00000000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF370000
0.0502 close(3) = 0
0.0514 munmap(0xFF380000, 8192) = 0
0.0521 brk(0x00022420) = 0
0.0523 brk(0x00024420) = 0
0.0526 time() = 1066157908
0.0531 open("/usr/share/lib/zoneinfo/US/Eastern", O_RDONLY) = 3
0.0533 read(3, " T Z i f\0\0\0\0\0\0\0\0".., 8192) = 1250
0.0536 close(3) = 0
0.0542 ioctl(1, TCGETA, 0xFFBEEFDC) = 0
Tue Oct 14 14:58:28 EDT 2003
0.0545 write(1, " T u e O c t 1 4 1".., 29) = 29
0.0547 llseek(0, 0, SEEK_CUR) = 1829
0.0549 _exit(0)
Solaris下调试程序方法:使用truss
truss 介绍
solaris下的truss跟linux下的strace功能一样,用来跟踪系统/库函数调用和系统接收到的信号。并把函数调用跟信号发送到标准出错上。
truss 使用方法
truss -a -e -f -rall -wall -p
truss -a -e -f -rall -wall
-a 显示传递给exec函数的参数
-e 显示传递给exec函数的环境变量
-f 显示子进程
-rall 显示所有读取的数据(默认32bytes)
-wall 显示所有写的数据(默认32bytes)
-p Hook到一个已存在的进程(必须是进程的所有者或者root)
-d 显示跟踪进程运行的时间
<program> 指定要运行的程序
truss 例子
# truss -rall -wall -f -p <PID>
# truss -rall -wall lsnrctl start
# truss -aef lsnrctl dbsnmp_start
0
# truss -d date
Base time stamp: 1066157908.5731 [ Tue Oct 14 14:58:28 EDT 2003 ]
0.0000 execve("/usr/bin/date", 0xFFBEF29C, 0xFFBEF2A4) argc = 1
0.0449 mmap(0x00000000, 8192, PROT_READ|PROT_WRITE|PROT_EXEC,MAP_PRIVATE|MAP_ANON, -1, 0) = 0xFF3A0000
0.0453 resolvepath("/usr/lib/ld.so.1", "/usr/lib/ld.so.1", 1023) = 16
0.0457 open("/var/ld/ld.config", O_RDONLY) Err#2 ENOENT
0.0460 open("/usr/lib/libc.so.1", O_RDONLY) = 3
0.0463 fstat(3, 0xFFBEE9C4) = 0
0.0464 mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF390000
0.0466 mmap(0x00000000, 794624, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF280000
0.0470 mmap(0xFF33A000, 24652, PROT_READ|PROT_WRITE|PROT_EXEC,MAP_PRIVATE|MAP_FIXED, 3, 696320) = 0xFF33A000
0.0474 munmap(0xFF32A000, 65536) = 0
0.0479 memcntl(0xFF280000, 113332, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
0.0481 close(3) = 0
0.0483 open("/usr/lib/libdl.so.1", O_RDONLY) = 3
0.0485 fstat(3, 0xFFBEE9C4) = 0
0.0487 mmap(0xFF390000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED,3, 0) = 0xFF390000
0.0490 close(3) = 0
0.0493 open("/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1", O_RDONLY) = 3
0.0496 fstat(3, 0xFFBEE854) = 0
0.0497 mmap(0x00000000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF380000
0.0500 mmap(0x00000000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF370000
0.0502 close(3) = 0
0.0514 munmap(0xFF380000, 8192) = 0
0.0521 brk(0x00022420) = 0
0.0523 brk(0x00024420) = 0
0.0526 time() = 1066157908
0.0531 open("/usr/share/lib/zoneinfo/US/Eastern", O_RDONLY) = 3
0.0533 read(3, " T Z i f\0\0\0\0\0\0\0\0".., 8192) = 1250
0.0536 close(3) = 0
0.0542 ioctl(1, TCGETA, 0xFFBEEFDC) = 0
Tue Oct 14 14:58:28 EDT 2003
0.0545 write(1, " T u e O c t 1 4 1".., 29) = 29
0.0547 llseek(0, 0, SEEK_CUR) = 1829
0.0549 _exit(0)
