straceIncludes:
hatrace executable similar to stracewrite() syscall to an .o file, checking whether it will recover from that in the next run.sqlite does, exhaustively testing whether your program can recover from a crash in any syscall.git clone --recursive https://github.com/nh2/hatrace && cd hatracegit submodule init && git submodule update --init --recursivestack installcabal installThis software is work in progress.
The hatrace executable is extremely basic and can't do much.
While syscall names are automatically generated, detail data needs to be implemented by hand and is done for only a few so far. Help to add more is appreciated.
However, the Haskell API to write scripts can already do a lot. Take a look at the test suite for examples.
If you find any of the below topics interesting give it a shot! It is recommended to file an issue when picking up one of the tasks to coordinate and avoid doing duplicate work.
sysenterUse cases abovehatrace executable features:
strace -ttt and -Tsched_yield, futex and signalsstrace -f)strace -y (tracking origin of file descriptors, printing paths)strace -c (keeping counts, summary statistics)strace -y but telling which PID is which executable from /proc/PID/exePTRACE_EVENT detail information (see section PTRACE_SETOPTIONS in man 2 ptrace)exit() of the direct child (grand-child daemonisation)peekBytes returning EIO when the tracee passes invalid memory to the kernel; instead, peek only what's possible and print some info. That makes it possible to correctly trace processes that rely on e.g. SIGSEGV handlers.Haskell
91.7%
C
6.5%
straceIncludes:
hatrace executable similar to stracewrite() syscall to an .o file, checking whether it will recover from that in the next run.sqlite does, exhaustively testing whether your program can recover from a crash in any syscall.git clone --recursive https://github.com/nh2/hatrace && cd hatracegit submodule init && git submodule update --init --recursivestack installcabal installThis software is work in progress.
The hatrace executable is extremely basic and can't do much.
While syscall names are automatically generated, detail data needs to be implemented by hand and is done for only a few so far. Help to add more is appreciated.
However, the Haskell API to write scripts can already do a lot. Take a look at the test suite for examples.
If you find any of the below topics interesting give it a shot! It is recommended to file an issue when picking up one of the tasks to coordinate and avoid doing duplicate work.
sysenterUse cases abovehatrace executable features:
strace -ttt and -Tsched_yield, futex and signalsstrace -f)strace -y (tracking origin of file descriptors, printing paths)strace -c (keeping counts, summary statistics)strace -y but telling which PID is which executable from /proc/PID/exePTRACE_EVENT detail information (see section PTRACE_SETOPTIONS in man 2 ptrace)exit() of the direct child (grand-child daemonisation)peekBytes returning EIO when the tracee passes invalid memory to the kernel; instead, peek only what's possible and print some info. That makes it possible to correctly trace processes that rely on e.g. SIGSEGV handlers.Haskell
91.7%
C
6.5%