From 90f5247f84f484ff71ed0a880f96f1a73b37b47a Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Fri, 13 Jun 2008 12:51:08 +0000 Subject: move _strace to be Linux-specific --- Completion/Linux/Command/.distfiles | 23 ++++++-- Completion/Linux/Command/_strace | 113 ++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 Completion/Linux/Command/_strace (limited to 'Completion/Linux') diff --git a/Completion/Linux/Command/.distfiles b/Completion/Linux/Command/.distfiles index c31b0a148..ff98cca82 100644 --- a/Completion/Linux/Command/.distfiles +++ b/Completion/Linux/Command/.distfiles @@ -1,10 +1,25 @@ DISTFILES_SRC=' .distfiles -_acpi _analyseplugin +_acpi +_analyseplugin _acpitool -_brctl _fusermount _iptables _iwconfig _losetup -_mii-tool _modutils _mondo _pkgtool _sshfs _tpb -_tpconfig _tune2fs _uml _valgrind _vserver +_brctl +_fusermount +_iptables +_iwconfig +_losetup _lsusb +_mii-tool +_modutils +_mondo +_pkgtool +_sshfs +_strace +_tpb +_tpconfig +_tune2fs +_uml +_valgrind +_vserver _yast ' diff --git a/Completion/Linux/Command/_strace b/Completion/Linux/Command/_strace new file mode 100644 index 000000000..ba777d68a --- /dev/null +++ b/Completion/Linux/Command/_strace @@ -0,0 +1,113 @@ +#compdef strace + +# TODO: +# - make _sys_calls system-dependent +# - allow negated calls (e.g. -e!write) +_sys_calls () { + local expl + + sys_calls=(_llseek _newselect _sysctl accept access acct + adjtimex afs_syscall alarm bdflush bind break brk cacheflush + capget capset chdir chmod chown chown32 chroot clone close connect + creat create_module delete_module dup dup2 execve exit fchdir + fchmod fchown fchown32 fcntl fcntl64 fdatasync flock fork fstat + fstat64 fstatfs fsync ftime ftruncate ftruncate64 get_kernel_syms + getcwd getdents getdents64 getegid getegid32 geteuid geteuid32 + getgid getgid32 getgroups getgroups32 getitimer getpagesize getpeername + getpmsg getpgid getpgrp getpid getppid getpriority getresgid getresgid32 + getresuid getresuid32 getrlimit getrusage getsid getsockname getsockopt + gettid gettimeofday getuid getuid32 gtty idle init_module ioctl ioperm + iopl ipc kill lchown lchown32 link listen lock lseek lstat lstat64 + madvise mincore mkdir mknod mlock mlockall mmap modify_ldt mount mprotect + mpx mremap msync munlock munlockall munmap nanosleep nfsservctl nice + oldfstat oldlstat oldolduname oldstat oldumount olduname open pause + personality phys pipe pivot_root poll prctl pread prof profil ptrace + putpmsg pwrite query_module quotactl read readahead readdir readlink + readv reboot recv recvfrom recvmsg rename rmdir rt_sigaction + rt_sigpending rt_sigprocmask rt_sigqueueinfo rt_sigreturn rt_sigsuspend + rt_sigtimedwait sched_get_priority_max sched_get_priority_min + sched_getparam sched_getscheduler sched_rr_get_interval sched_setparam + sched_setscheduler sched_yield security select sendfile send sendmsg sendto + setdomainname setfsgid setfsgid32 setfsuid setfsuid32 setgid setgid32 + setgroups setgroups32 sethostname setitimer setpgid setpriority setregid + setregid32 setresgid setresgid32 setresuid setresuid32 setreuid setreuid32 + setrlimit setsid setsockopt settimeofday setuid setuid32 setup sgetmask + shutdown sigaction sigaltstack signal sigpending sigprocmask sigreturn + sigsuspend socket socketcall socketpair ssetmask stat stat64 statfs stime + stty swapoff swapon symlink sync sysfs sysinfo syslog time times truncate + truncate64 ulimit umask umount uname unlink uselib ustat utime vfork vhangup + vm86 vm86old wait4 waitpid write writev) + + for t in ${(s:,:)${PREFIX}}; do + sys_calls=( ${sys_calls:#$t} ) + done + compset -P '*,' + _wanted sys_calls expl 'System calls' compadd -qS , -a sys_calls +} + +_sets () { + _alternative \ + 'special:Special values:(all none)' \ + 'calls::_sys_calls' +} + +_traces () { + local expl + traces=('file:Trace all system calls which take a file name as an argument' + 'process:Trace all system calls which involve process management' + 'network:Trace all the network related system calls' + 'signal:Trace all signal related system calls' + 'ipc:Trace all IPC related system calls' + 'desc:Trace all file descriptor related system calls') + compset -P '*,' + _describe -t traces 'Related system calls' traces -qS , +} + +_traces_sets () { + _alternative \ + 'traces::_traces' \ + 'sets::_sets' +} + +_expression () { + _values -S = "Qualifying expression" \ + 'trace[Trace specified set of system calls only]:system calls:_traces_sets' \ + 'abbrev[Abbreviate the output from printing each member of large structures]:system calls:_sets' \ + 'verbose[Dereference structures for the specified set of system calls]:system calls:_sets' \ + 'raw[Print raw, undecoded arguments for the specified set of system calls]:system calls:_sets' \ + 'signal[Trace only the specified subset of signals]:signal:{compset -P "*,"; _signals -s -qS ,}' \ + 'read[Perform a full hex and ASCII dump of all the data read from listed file descriptors]:file descriptors:{compset -P "*,"; _file_descriptors -qS ,}' \ + 'write[Perform a full hex and ASCII dump of all the data written to listed file descriptors]:file descriptors:{compset -P "*,"; _file_descriptors -qS ,}' + if [[ -z "$words[CURRENT]" || -n "${words[CURRENT]:#*=*}" ]]; then + _traces_sets + fi +} + +_arguments \ + '()-c[Count time, calls, and errors for each system call and report a summary]' \ + -d'[Show some debugging output of strace itself on the standard error]' \ + -f'[Trace child processes as they are created by currently traced processes]' \ + -ff'[Write each process trace to . (when using -o ]' \ + '(-c -d -f -ff -i -q -r -t -tt -ttt -T -v -V -x -xx -a -e -o -O -p -s -S -u -E)-h[Print help]' \ + -i'[Print the instruction pointer at the time of the system call]' \ + -q'[Suppress messages about attaching, detaching etc.]' \ + -r'[Print a relative timestamp upon entry to each system call]' \ + '(-ttt)-t[Prefix each line of the trace with the time of day]' \ + '(-ttt -tt)-tt[Prefix each line of the trace with the time of day including the microseconds]' \ + '(-tt -t)-ttt[Prefix each line of the trace with the number of seconds and microseconds since the epoch]' \ + -T'[Show the time spent in system calls]' \ + -v'[Print unabbreviated versions of environment, stat, termios, etc. calls]' \ + '(-c -d -f -ff -h -i -q -r -t -tt -ttt -T -v -x -xx -a -e -o -O -p -s -S -u -E)-V[Print the version number of strace]' \ + '(-xx)-x[Print all non-ASCII strings in hexadecimal string format]' \ + '(-x)-xx[Print all strings in hexadecimal string format]' \ + -a'[Align return values in a specific column (default 40)]:column number' \ + '*-e[Select events to trace or how to trace]:system call:_expression' \ + '-o[Write the trace output to the file]:output file:_files' \ + '-O[Overhead for tracing system calls]:overhead microseconds' \ + '(:)-p[Attach to the process with specified process ID and begin tracing]:Process ID:_pids' \ + '-s[Specify the maximum string size to print (default 32)]:maximum string size' \ + '-S[Sort the output of the histogram (-c option) by the specified criterion]:sort by:(time calls name nothing)' \ + '-u[Run as specified user]:user:_users' \ + '*-E[Remove variable from the inherited list of environment or define a value]:variable:_printenv' \ + '(-):command name: _command_names -e' \ + '*::arguments:_normal' -- cgit 1.4.1