7. Helgrind: a thread error detector
To use this tool, you must specify
--tool=helgrind
on the Valgrind command line.
7.1. Overview
Helgrind is a Valgrind tool for detecting synchronisation errors in C, C++ and Fortran programs that use the POSIX
pthreads threading primitives.
The main abstractions in POSIX pthreads are: a set of threads sharing a common address space, thread creation,
thread joining, thread exit, mutexes (locks), condition variables (inter-thread event notifications), reader-writer locks,
spinlocks, semaphores and barriers.
Helgrind can detect three classes of errors, which are discussed in detail in the next three sections:
1.
Misuses of the POSIX pthreads API.
2.
Potential deadlocks arising from lock ordering problems.
3.
Data races -- accessing memory without adequate locking or synchronisation
.
Problems like these often result in unreproducible, timing-dependent crashes, deadlocks and other misbehaviour, and
can be difficult to find by other means.
Helgrind is aware of all the pthread abstractions and tracks their effects as accurately as it can. On x86 and amd64
platforms, it understands and partially handles implicit locking arising from the use of the LOCK instruction prefix.
On PowerPC/POWER and ARM platforms, it partially handles implicit locking arising from load-linked and store-
conditional instruction pairs.
Helgrind works best when your application uses only the POSIX pthreads API.
However, if you want to use
custom threading primitives, you can describe their behaviour to Helgrind using the
ANNOTATE_*
macros defined in
helgrind.h
.
Following those is a section containing
hints and tips on how to get the best out of Helgrind.
Then there is a
summary of command-line options.
Finally, there is
a brief summary of areas in which Helgrind could be improved.
7.2. Detected errors: Misuses of the POSIX
pthreads API
Helgrind intercepts calls to many POSIX pthreads functions, and is therefore able to report on various common
problems.
Although these are unglamourous errors, their presence can lead to undefined program behaviour and
hard-to-find bugs later on. The detected errors are:
• unlocking an invalid mutex
• unlocking a not-locked mutex
• unlocking a mutex held by a different thread
106
Содержание BBV
Страница 176: ...Valgrind FAQ Release 3 8 0 10 August 2012 Copyright 2000 2012 Valgrind Developers Email valgrind valgrind org ...
Страница 177: ...Valgrind FAQ Table of Contents Valgrind Frequently Asked Questions 1 ii ...
Страница 302: ...README mips based on newer GCC versions if possible 95 ...
Страница 303: ...GNU Licenses ...
Страница 304: ...GNU Licenses Table of Contents 1 The GNU General Public License 1 2 The GNU Free Documentation License 8 ii ...