Kcov (28): * Don't report each invalid breakpoint on --verify (give a summary instead) * Issue #103: html: Display error message if JavaScript is disabled in the browser * Issue #101: Fix regression which caused --collect-only to work only if the source code was available. * Coveralls: Use source_digest instead of source (current API?) * Issue #99: Add support for looking up debug info from .gnu_debuglink sections (Vincent Brillault) * Issue #98: Show execution order in the HTML output and add headings for the source view * Issue #26: Don't warn for non-existing ELFs (typically linux-vdso.so.1) * Issue #91: Correctly generate [merged] output after running two programs -- Simon Kagstrom , Sat Jul 4 05:16:21 CEST 2015 Kcov (27): * Issue #90: coveralls: Publish merged results if available * Issue #88: bash: Correct handling of ${var#} * Issue #87: Allow coveralls uploads when using --merge (Ricardo Martins) * Issue #86: Fix build on distros with Python 3 as default (David Barnett) * python: Improve handling of some corner-cases for '''-strings * Issue #76: bash: Handle multi-line quoted strings * Issue #60: Add --merge option to merge output of multiple runs (i.e., what the kcov-merge script did, but now integrated) * Issue #81: Make --include-path= combined with --include-pattern= coexist more naturally (i.e., consider both) * Lookup realpath of the paths passed to --include/exclude-path= * Issue #18: Add --verify option that checks that all breakpoints are set on proper addresses (i.e., instruction boundaries) * Issue #80: Fix coverage accumulation for PIE executables -- Simon Kagstrom , Fri May 1 19:44:04 CEST 2015 Kcov (26): * Issue #77: Collect coverage for Position-Independent Executables (Kang Seonghoon) * Issue #72: Don't crash on filenames <3 characters long (Kang Seonghoon) * Issue #71: Don't skip instructions on SIGSTOP (unbreaks PowerPC) * Issue #70: bash: Handle $# ad ${#var ..} (not comments) * Issue #66: bash: Unbreak handling of arithmetic shifts (conflict with heredocs) * Issue #65: merge-parser: Don't panic on non-existing files (e.g., if moved) * Issue #64: bash: Always parse the file given on the command line * Issue #63: bash: Correct check for empty braces * Issue #62: bash: Check for balenced parenthesis (e.g., in cases) * Issue #51: bash: Collect coverage for #!/bin/sh executables via preloading (off by default) * bash: Add ability to use DEBUG trap instead of PS4 (off by default, not stable) * Unbreak accumulation (for certain programs) * Fix hanging regression introduced in v23 (don't take solib semaphore before open/read) * Report file-not-found or file-not-executable errors more clearly * Issue #61: bash-engine: Output trace data via BASH_XTRACEFD when possible (bash >= 4.2) and filter stdout to catch redirections otherwise * Issue #58: Lookup program in $PATH if it's not given on the command line * Issue #57: bash-engine: Correct handling of quoted multiline variables -- Simon Kagstrom , Tue Mar 17 19:16:46 CET 2015 Kcov (25): * Make database files smaller by storing only executed addresses * Issue #52: Don't include bash-helper.sh in the output * Issue #54: Implement handling of coverage accumulation for shared libraries * Issue #50: Make sure that Bash "heredoc" markers are words * Fix some failure handling coverity errors * Issue #49 (WIP): Implement broken gcov engine (multiple issues still pending) * Refactor configuration handling to be more generic (avoid setters, use key/value pairs via strings instead) * Add "capabilities" class to make parts of the implementation clearer * HTML-writer: Correct off-by-one access to static data -- Simon Kagstrom , Tue Feb 10 19:38:04 CET 2015 Kcov (24): * Misc performance improvements here and there * Build: Use the travis-ci.org build service to make tests more reliable. * Unbreak Python and Bash coverage collection on 32-bit builds * Correct clang build (well, in Fedora 20 it still fails) * Issue #43: Clarify elfutils dependency * Issue #46: Add support for uploading to coveralls.io via the --coveralls-id= option * Issue #45: Bash: Fix coverage collection when executing sub-scripts as programs. * Issue #31: Fix handling of attaching to pid in a multithreaded process. Implementation taken from GDB: kcov now loops through all threads in a process and attaches to each one. * Issue #44: Bash: Fix issues with <<< redirection, which were parsed as here documents * Update the HTML/Cobertura output to display single-shot, limited and unlimited output in a logical way * Allow three hit modes for parsers/engines: Single-shot (covered or not, as in the merge parser), limited (as in ptrace) and unlimited (line execution count used in Python/Bash) * Remove some ptrace-specific stuff from the Engine interface * Document classes better -- Simon Kagstrom , Mon Jan 5 09:46:29 CET 2015 Kcov (23): * Correct use-after-free case when the solib thread is killed * Default to 5s output interval to avoid costly write-to-disk sessions too often * Performance improvements for the Cobertura writer by reducing the amount of string operations * Add a kcov-merge command which merges data from multiple kcov directories into a single report (Chris Love) * Issue #39: Reduce the amount of extra output files by using filename as a tie breaker instead of file data. * Issue #38: Fix several bugs which caused merged output to miss data present in the regular output * Issue #37: Correct coverage accumulation for Python/bash * Issue #36: Collect coverage from dlopen:ed libraries (through unconditional breakpoints in the dlopen call). Should also improve reliability of general shared library coverage collection -- Simon Kagstrom , Tue Dec 2 20:42:04 CET 2014 Kcov (22): * Issue #35: Support installation RPATH for build (Chris Love) * Issue #32: Fix problems when running Python unittest modules * Various coverity resource leak fixes * Peek into files to improve performance for matching (also see Issue #33) * Break out solib handling from ptrace (not really related) * Improve ptrace performance a bit, while also simplifying code -- Simon Kagstrom , Wed Oct 29 12:58:18 CET 2014 Kcov (21): * Fix regression for coverage-of-32-bit-binaries-on-64-bit-systems introduced in kcov 20 * Slightly better file stat caching (slight performance improvement) * Avoid outputting merged cobertura output for single coverage runs -- Simon Kagstrom , Thu Aug 7 20:00:20 CEST 2014 Kcov (20): * Issue #25: Fix starvation bug where long report generation time could starve the actual application. The bug was caused by a timestamp issue. * Issue #18: Provide explanation and possible workaround for SIGILL problems with GCC 4.1.2 * Issue #23: Warn if a binary has no debug symbols * Replace std::list/std::map with std::list/std::unordered_map where possible (slight performance improvement) * Remove C++11 constructs (auto, nullptr, range-based for-loops) to allow building with older compilers * Correct bug in --report-only (crash in ptrace upon termination) * Slight performance improvement and simplification in the lineid code -- Simon Kagstrom , Mon Aug 4 12:57:19 CEST 2014 Kcov (19): * bash coverage: Implemented support for collecting shell script (sh/bash) coverage! Loosely based on shcov, which is now deprecated because of this * html-writer: Correct executable lines/covered lines in the summary (was wrong in some cases) -- Simon Kagstrom , Mon Jun 30 18:30:37 CEST 2014 Kcov (18): * Performance: Improve performance by cacheing realpath() * HTML: Always put merged results last and don't include them in sorting * HTML: Coloring improvements (?) of the HTML output * HTML: Refactor HTML output completely to use javascript-based pages. This allows selecting how to sort directly from the web page, and greatly simplifies the generating C++ code * Correct filtering bug in the merged output, where the last run would filter out data from the previous runs * Issue #20: Fix hanging-on-killed-by-signal -- Simon Kagstrom , Mon Jun 9 19:12:38 CEST 2014 Kcov (17): * Issue #19: Fix bug where kcov would let children which called setpgid live even after terminating kcov itself (Oliver) * Issue #16: Output: Implement a merged mode, which shows a combination of all covered programs under the [merged] link * Fix an HTML output bug introduced in kcov 14 where the summary counts in the index page would be wrong. * Issue #15: Fix a crash when source lines are > ~2000 characters long * Issue #17: Fix parsing of multiple include/exclude patterns (Jamie Kirkpatrick) * Split usage in common/uncommon options * Improve unit tests and robot framework tests * Various work on the kernel-engine and general refactoring -- Simon Kagstrom , Sun May 18 19:24:14 CEST 2014 Kcov (16): * kernel-engine: Implement an engine to handle kernel code coverage collection (not finished) * kprobe-coverage: Refactor the kernel module so that it basically works now * Code refactoring and more C++11-izing * Python: Filter out some false negatives (i.e., non-executable lines marked as red) * Python: Report absolute paths so that output filtering works * Python: Catch exceptions in the python helper to avoid EOF etc being propagated upwards (and coverage collection to fail) * Python: Fix a case where the engine would simply hang on waiting for more data -- Simon Kagstrom , Fri Mar 21 16:38:28 CET 2014 Kcov (15): * Workaround a shared-library issue where kcov would sometimes hang on the malloc. The workaround uses a static memory buffer instead. * Implemented support for collecting Python code coverage! Usage is the same as for compiled code. * Code-restructuring to allow multiple "engines", which makes it possible to add the python support above. * More C++11-izing of the code -- Simon Kagstrom , Sun Mar 2 10:50:00 CET 2014 Kcov (14): * Add two options, --collect-only and --report-only to only collect coverage and produce Cobertura/HTML output respectively. Can be used for example on embedded systems where the source code isn't available. * PowerPC support has been added (thanks to Aleksandr Vilchinskii and Konstantin Polivtsev for testing this) -- Simon Kagstrom , Wed Feb 5 19:42:03 CET 2014 Kcov (13): * Don't hang the kcov main process if a breakpoint comes in before the solib handler constructor has executed (depends on the construction order) * Correct bug with realloc in solib handling (malloc all data once only) -- Simon Kagstrom , Sun Dec 8 19:34:37 CET 2013 Kcov (12): * Fix lockup bug in the solib code path (where processes with many solibs would hang at startup) * Correct a crash in the reporter * Add test case for signals * Report from main thread to avoid threading issues * Fairly major refactoring of ptrace code to avoid an issue where two PTRACE_CONTINUE calls could be done without waitpid() in between. This would cause crashes in the traced program. * Add support for looking for debug info in separate files via build-id (Alexander Larsson) * Add --exit-first-process option to fork kcov when covering daemons (otherwise kcov will wait for all children to finish) * Add --skip-solibs option to disable processing of shared libraries, which also works around a bug which sometimes triggers * Add --replace-source-path option for cases where the sources have been moved (James Warner) * Fix linking (Igor Murzov) * Some build fixes to make it build with clang++ * Fix various warnings * Add experimental profiler based on kcov * Add sorting by reverse-percent (high -> low, -u option) * Cache non-existing files to avoid doing lstat calls all the time (slight performance improvement) * closedir() was not called from the html-writer, which creates a resource leak (Karl Vogel) -- Simon Kagstrom , Sat Oct 19 11:06:42 CEST 2013 Kcov (11): * Fix handling of common paths in HTML writer * Fix bug in shared library handling where repeated exec()s would cause strange hangs. Fixed by unsetting the KCOV_SOLIB_PATH environment variable after the first executable has been started. Add test-popen test case to check for this. * Expand ~'s in the --include-path and --exclude-path options * Unbreak accumulating data from multiple runs again (introduced sometime during refactoring), and add test case for this -- Simon Kagstrom , Sat Aug 18 08:45:03 CEST 2012 Kcov (10): * Fix bug where multiple files with the same name would only be shown once in the HTML output. * Fix icache conflict bug (present while instrumenting shared libraries) on multi-CPU systems by forcing all traced processes to one CPU * Re-enable the --pid=PID argument to trace a running process again * Fix race condition in the reporter * Only set breakpoints in executable sections. This avoids problems where the DWARF line information points to non-code sections (which can happen) * Fix coverage reporting of orphaned children (where the parent does not wait(2) for the child * Use std::unordered_map for breakpoints (improves performance somewhat) * Improve unit tests * Add robot-framework testsuite that can be run from a Jenkins server -- Simon Kagstrom , Mon Jul 23 13:28:43 CEST 2012 Kcov (9): * Completely refactor the source code (yes, everything!), and add unit tests to verify kcov itself. The code is now in C++. * Implement transparent coverage instrumentation for shared libraries (done automatically) * Implement a Cobertura-compatible XML backend. This allows integrating kcov coverage information in Jenkins. * Improve performance a lot by filtering out files already at the instrumentation step (and not only during HTML generation). This means that --include-pattern/--include-path can improve kcov performance by quite a bit. -- Simon Kagstrom , Fri Jun 15 17:39:17 CEST 2012 Kcov (8): * Import the man-page from Debian and update it. * Simplify parts of the ptrace code * Correct the sorting of files-by-percentage when the difference is less than 0.5% (thanks Martin!). * Correct the percentage-bar color according to the configured limits in the report. -- Simon Kagstrom , Sun Dec 4 14:13:47 CET 2011 Kcov (7): * Weed out common parts of source paths from the report, display the full path as the HTML title= tag * Fix crash bug in argument passing * Handle hit count a bit better -- Simon Kagstrom , 2011-07-10 Kcov (6): * Correct hit count. The hit count is no longer over the number of possible hits * Better error reporting when stripped or otherwise broken binaries are passed to kcov * Handle files with relative directory paths (lookup the absolute path via DWARF source files). Otherwise, some files are not reported in the output. * Add test program to detect regressions * Detect stripped binaries and report that you'll need to build with -g * Correct --include/exclude-path behavior. The previous version will match PATH*/* instead of just PATH/* (Igor Murzov) * Various small fixes -- Simon Kagstrom , Sat Apr 16 08:28:27 CEST 2011 Kcov (5): * Switch from libdwarf to libdw (from elfutils) for building kcov. libdw is a bit more logical than libdwarf. * Implement actual path matching (Igor Murzov) * Rename path-matching to pattern matching (which is what it does) and set it up using long options. * Parse options with getopt * Don't escape all multibyte characters in the report. That will break display of UTF-8 etc (Igor Murzov) * Improve cmake packaging support (Igor Murzov) -- Simon Kagstrom , Sat Feb 12 15:25:57 CET 2011 Kcov (4): * Build system is now based on cmake (Igor Murzov) * Add MIPS32, ARM and PowerPC architecture support. This is untested though and might very well not work at all. * Add -t option to set the title of the program to test (otherwise it will be the filename) * Refactored the architecture support to allow running i386 programs on x86_64 machines, and easier add other architectures * Make it possible to collect coverage from multiple programs in a single directory, useful for example when running a test suite * Add coverage color to the header as well * Misc refactoring -- Simon Kagstrom , Tue Dec 7 18:20:28 CET 2010 Kcov (3): * Various bug fixes * Add ability to trace running processes by PID * Fix copyright headers -- Simon Kagstrom , Sat Nov 13 08:13:03 CET 2010 Kcov (2): * Misc fixes * Add ability to specify low/high limits * Add state saving between runs. Re-starting the same program will then add to existing coverage instead of starting from scratch. * Link to web page in the report * Add option to sort by percentage or file name -- Simon Kagstrom , Sun Oct 24 09:15:39 CEST 2010 Kcov (1): * Initial release -- Simon Kagstrom