Hello,
I’m trying to use helgrind to debug thread race conditions in our software.
We’re using std::thread(), std::atomic() and conditional variables.
Currently, I’m facing the following difficulties:
* Std::thread() work fairly ok using
http://www.valgrind.org/docs/manual/drd-manual.html#drd-manual.C++11
* Std::thread() doen’t show thread names in valgrind output when being set by
pthread_setname_np(handle, threadName.c_str());
Thread names are seen in gdb-debugger though
* Using the Client-request interface by
ANNOTATE_THREAD_NAME(threadName_.c_str());
std::thread::id tid=thread_.get_id();
unsigned Valgrindid = DRD_GET_VALGRIND_THREADID;
unsigned Helgrindid = DRD_GET_DRD_THREADID;
std::cout << "ID: " << tid << " Valgrind_ID: " << Valgrindid << "
Helgrind_ID: " << Helgrindid << " WT-Name: "<< threadName_ << std::endl;
Doesn't print out good stuff. It prints the system-Thread ID, but Valgrind
and Helgrind IDs are 0. ThreadName_ is the correct user defined name.
* std::atomic() are treated as racy
* conditional variables are treated as racy
* std::future is racy ?
I'm calling the program via
valgrind \
--tool=helgrind \
--log-socket=172.17.17.1 \
-v \
./Application.elf
==1614== ---Thread-Announcement------------------------------------------
==1614==
==1614== Thread #21 was created
==1614== at 0x4E016F6: clone (clone.S:56)
==1614== by 0x486B9FB: create_thread (createthread.c:100)
==1614== by 0x486D4E7: pthread_create@@GLIBC_2.4 (pthread_create.c:822)
==1614== by 0x484E9F3: ??? (in
/usr/lib/valgrind/vgpreload_helgrind-arm-linux.so)
==1614==
[...]
==1614== Lock at 0x7D9D47BC was first observed
==1614== at 0x484C6B0: ??? (in
/usr/lib/valgrind/vgpreload_helgrind-arm-linux.so)
==1614== Address 0x7d9d47bc is on thread #1's stack
==1614==
==1614== Lock at 0x4EAD5E4 was first observed
==1614== at 0x484C6B0: ??? (in
/usr/lib/valgrind/vgpreload_helgrind-arm-linux.so)
==1614== Address 0x4ead5e4 is 244 bytes inside a block of size 328 alloc'd
==1614== at 0x4849368: operator new(unsigned int) (in
/usr/lib/valgrind/vgpreload_helgrind-arm-linux.so)
==1614== Block was alloc'd by thread #1
==1614==
==1614== Possible data race during read of size 4 at 0x4EB3968 by thread #1
==1614== Locks held: 1, at address 0x7D9D47BC
==1614== at 0x17186C: _M_ptr (unique_ptr.h:147)
==1614== by 0x17186C: get (unique_ptr.h:337)
==1614== by 0x17186C: operator* (unique_ptr.h:323)
==1614== by 0x17186C: wait (future:338)
==1614== by 0x17186C: _M_get_result (future:717)
==1614== by 0x17186C: get (future:796)
Is there any help to get this working?
Thanks,
Mario
-------------------------------------------------------------------
Röders GmbH
Sitz Soltau, Amtsgericht Lüneburg HRB 101247
Geschäftsführer: Dipl.-Ing. Jürgen Röders
Diese Nachricht und die mit ihr übermittelten Dateien sind vertraulich. Wenn
Sie nicht der Empfänger sein sollten, für den die Nachricht bestimmt ist, bitte
lesen oder kopieren Sie die Nachricht nicht und stellen Sie sie nicht anderen
zur Verfügung. Bitte benachrichtigen Sie mich durch Beantwortung dieser E-Mail
und löschen Sie sie anschließend. Vielen Dank.
This email and any files transmitted with it are confidential and intended for
the individuals or entities named above. If you are not the intended recipient,
please do not read, copy, use or disclose this communication to others; also
please notify the sender by replying to this message and then delete it from
your system. Thank you.
_______________________________________________
Valgrind-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-users