mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-21 00:01:26 +01:00
129 lines
4.9 KiB
Text
129 lines
4.9 KiB
Text
#compdef valgrind -value-,VALGRIND_OPTS,-default-
|
|
|
|
local curcontext="$curcontext" state line
|
|
local -a cmd common common_mem_null \
|
|
args args_{addrcheck,memcheck,cachegrind,helgrind,lackey,massif,none}
|
|
|
|
cmd=(
|
|
'1:command name:_command_names -e'
|
|
'*::args :_normal'
|
|
)
|
|
|
|
if [[ $service = *_OPTS* ]]; then
|
|
compset -q
|
|
words=( fake "$words[@]" )
|
|
(( CURRENT++ ))
|
|
cmd=()
|
|
fi
|
|
|
|
common=(
|
|
'--alignment=-[set minimum alignment of allocations]:number'
|
|
)
|
|
|
|
common_read_varinfo=(
|
|
'--read-var-info=-[read DWARF3 debug info]:enable:(yes no)'
|
|
)
|
|
|
|
common_mem_null=(
|
|
'--xml=-[output everything in XML]:enable:(yes no)'
|
|
'--xml-user-comment=-[copy specified string verbatim to XML output]:string'
|
|
)
|
|
|
|
args_addrcheck=(
|
|
$common
|
|
$common_mem_null
|
|
'--partial-loads-ok=-:enable:(yes no)'
|
|
'--freelist-vol=-[volume of freed blocks queue]:blocks'
|
|
'--leak-check=-[search for memory leaks at exit]:enable:(yes no)'
|
|
'--leak-resolution=-[how much bt merging in leak check]:level:(low med high)'
|
|
'--show-reachable=-[show reachable blocks in leak check]:enable:(yes no)'
|
|
'--workaround-gcc296-bugs=-:enable:(yes no)'
|
|
)
|
|
|
|
args_memcheck=(
|
|
$args_addrcheck
|
|
$common_read_varinfo
|
|
)
|
|
|
|
args_cachegrind=(
|
|
'--I1=-[set I1 cache manually]:size,assoc,line_size'
|
|
'--D1=-[set D1 cache manually]:size,assoc,line_size'
|
|
'--L2=-[set L2 cache manually]:size,assoc,line_size'
|
|
)
|
|
|
|
args_helgrind=(
|
|
$common
|
|
$common_read_varinfo
|
|
'--private-stacks=-[assume thread stacks are used privately]:enable:(yes no)'
|
|
'--show-last-access=-[show location of last word access on error]:locations:(no some all)'
|
|
)
|
|
|
|
args_lackey=(
|
|
'--fnname=-[count calls to specified name]:name'
|
|
'--detailed-counts=-[count loads, stores and alu ops]:enable:(yes no)'
|
|
)
|
|
|
|
args_massif=(
|
|
$common
|
|
'--heap=-[profile heap blocks]:enable:(yes no)'
|
|
'--heap-admin=-[specify average admin bytes per heap block]:bytes'
|
|
'--stacks=-[enable profile stacks]:enable:(yes no)'
|
|
'--depth=-[depth of contexts]:depth'
|
|
'--alloc-fn=-[specify alloc function]:function'
|
|
'--format=-[specify format of textual output]:format:(text html)'
|
|
)
|
|
|
|
args_none=(
|
|
$common_mem_null
|
|
)
|
|
|
|
args="args_${${words[(r)--tool=*]#*=}:-memcheck}"
|
|
|
|
_arguments -C ${(P)args} $cmd \
|
|
'--tool=-[specify valgrind tool]:valgrind tool:->tools' \
|
|
'(-h --help)'{-h,--help}'[show help information]' \
|
|
'--help-debug[show help info including debugging options]' \
|
|
'--version[show version]' \
|
|
'(-q --quiet)'{-q,--quiet}'[run silently; only print error msgs]' \
|
|
'(-v --verbose)'{-v,--verbose}'[be more verbose]' \
|
|
'--trace-children=-[valgrind-ise child processes]:enable:(yes no)' \
|
|
'--track-fds=-[track open file descriptors]:enable:(yes no)' \
|
|
'--time-stamp=-[add timestamps to log messages]:enable:(yes no)' \
|
|
'--log-fd=-[log messages to specified file descriptor]:file descriptor:_file_descriptors' \
|
|
'--log-file=-[log messages to specified file with pid appended]:file:_files' \
|
|
'--log-file-exactly=-[log messages to specified file]:file:_files' \
|
|
'--log-file-qualifier=-[log messages to filename given by specified environment variable]:variable:_parameters -g "*scalar*"' \
|
|
'--log-socket=-[log messages to socket]:ipaddr\:port' \
|
|
'--run-libc-freeres=-[free up glibc memory at exit]:enable:(yes no)' \
|
|
'--sim-hints=-[enable hint]:hint:(lax-ioctls enable-outer)' \
|
|
'--show-emwarns=-[show warnings about emulation limits]:enable:(yes no)' \
|
|
'--kernel-variant=-[handle non-standard kernel variants]:kernel variant:_values -s , kernel\ variant bproc' \
|
|
'--demangle=-[automatically demangle C++ names]:enable:(yes no)' \
|
|
'--num-callers=-[specify no of callers to show in stack traces]:number' \
|
|
'--error-limit=-[stop showing new errors if too many]:enable:(yes no)' \
|
|
'--show-below-main=-[continue stack traces below main()]:enable:(yes no)' \
|
|
'--suppressions=-[suppress errors described in specified file]:file:_files' \
|
|
'--gen-suppressions=-[print suppressions for errors detected]:enable:(yes no)' \
|
|
'--db-attach=-[start debugger when errors detected]:enable:(yes no)' \
|
|
'--db-command=-[specify command to start debugger]:command:_command_names -e' \
|
|
'--input-fd=-[specify file descriptor for input]:file descriptor:_file_descriptors' \
|
|
'--max-stackframe=-[assume stack switch for SP changes larger than specified number of bytes]:bytes' \
|
|
&& return
|
|
|
|
typeset -a tools
|
|
|
|
if [[ -n "$state" ]]; then
|
|
# `valgrind --tool=` no longer works.
|
|
# The method below is even more hackish, but the only one I could find.
|
|
# Basically uses debug output to find out the directory where the tools are
|
|
# present and lists all executables in that directory.
|
|
# Hope the program provides a neater interface some day!
|
|
() {
|
|
setopt localoptions histsubstpattern
|
|
tools=( ${${${(M)${(f)"$(_call_program tools valgrind --tool=something -d 2>&1)"}:#*launcher launching *something*}##*launcher launching }%%something*}*~*.*(*:t:s/-*//) )
|
|
typeset -U tools
|
|
}
|
|
_wanted tools exl 'valgrind tool' compadd $tools && return
|
|
fi
|
|
|
|
return 1
|