diff --git a/02-Use_the_Tools_Available.md b/02-Use_the_Tools_Available.md index 48debce..ca8d79e 100644 --- a/02-Use_the_Tools_Available.md +++ b/02-Use_the_Tools_Available.md @@ -16,6 +16,7 @@ Source control is an absolute necessity for any software development project. If Use an industry standard widely accepted build tool. This prevents you from reinventing the wheel whenever you discover / link to a new library / package your product / etc. Examples include: + * [Autotools](https://autotools.io) - The traditional GNU build system. * [CMake](http://www.cmake.org/) * Consider: https://github.com/sakra/cotire/ for build performance * Consider: https://github.com/toeb/cmakepp for enhanced usability @@ -25,9 +26,9 @@ Use an industry standard widely accepted build tool. This prevents you from rein * `cmake --build` provides a common interface for compiling your project regardless of platform * [Waf](https://waf.io/) * [FASTBuild](http://www.fastbuild.org/) - * [Ninja](https://ninja-build.org/) - can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. - * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution - * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid + * [Ninja](https://ninja-build.org/) - Can greatly improve the incremental build time of your larger projects. Can be used as a target for CMake. + * [Bazel](http://bazel.io/) - Fast incremental builds using network artefact caching and remote execution. + * [Buck](http://buckbuild.com/) - Similar to Bazel, with very good support for iOS and Andoid. * [gyp](https://chromium.googlesource.com/external/gyp/) - Google's build tool for chromium. * [maiken](https://github.com/Dekken/maiken) - Crossplatform build tool with Maven-esque configuration style. * [Qt Build Suite](http://doc.qt.io/qbs/) - Crossplatform build tool From Qt. @@ -275,13 +276,23 @@ A coverage analysis tool shall be run when tests are executed to make sure the e * [OpenCppCoverage](https://github.com/OpenCppCoverage/OpenCppCoverage) - open source coverage reporting tool for Windows. -### Valgrind +### Heap profiling -[Valgrind](http://www.valgrind.org/) is a runtime code analyzer that can detect memory leaks, race conditions, and other associated problems. It is supported on various Unix platforms. + * [Valgrind](http://www.valgrind.org/) + * Valgrind is a runtime code analyzer that can detect memory leaks, race conditions, and other associated problems. It is supported on various Unix platforms. + * [Heaptrack](https://github.com/KDE/heaptrack) + * A profiler created by a Valgrind's Massif developper. Quite similar to Massif with pros and cons over it, way more intuitive though. + * [Dr Memory](http://www.drmemory.org) + * [Memoro](https://epfl-vlsc.github.io/memoro/) - A detailed heap profiler. -### Dr Memory +### CPU profiling -Similar to Valgrind. http://www.drmemory.org + * [Hotspot](https://github.com/KDAB/hotspot) - An intuitive front-end to visualize datas produced by the [perf](https://perf.wiki.kernel.org) CPU profiler. + * [uftrace](https://github.com/namhyung/uftrace) - Can be used to generating function call graphs of a program execution. + +### Reverse engineering tools + + * [Cutter](https://cutter.re/) - A front-end for [Radare2](https://www.radare.org/n/radare2.html). It provides tools such as decompiler, disassembly, graph visualizer, hex editor. ### GCC / Clang Sanitizers @@ -321,10 +332,6 @@ MSVC's [Control Flow Guard](https://msdn.microsoft.com/en-us/library/windows/des * `_GLIBCXX_DEBUG` with GCC's implementation libstdc++ implementation. See [Krister's blog article](https://kristerw.blogspot.se/2018/03/detecting-incorrect-c-stl-usage.html). -### Heap Profiling - - * [https://epfl-vlsc.github.io/memoro/](Memoro) - A detailed heap profiler - ## Ignoring Warnings If it is determined by team consensus that the compiler or analyzer is warning on something that is either incorrect or unavoidable, the team will disable the specific error to as localized part of the code as possible. @@ -351,9 +358,9 @@ Don't forget to make sure that your error handling is being tested and works pro ## Debugging -### uftrace +### GDB -[uftrace](https://github.com/namhyung/uftrace) can be used to generating function call graphs of a program execution +[GDB](https://www.gnu.org/software/gdb/) - The GNU debugger, powerful and widely used. Most IDEs implement an interface to use it. ### rr