Valgrind和ThreadSanitizer

论文那个检测工具,还有些问题,我就把和它进行对比的工具在github上找了一下,然后运行了一下
Valgrind: A Framework for Heavyweight Dynamic Binary
Instrumentation 2007
Nethercote N , Seward J . Valgrind: a framework for heavyweight dynamic binary instrumentation[C]// Proceedings of the ACM SIGPLAN 2007 Conference on Programming Language Design and Implementation, San Diego, California, USA, June 10-13, 2007. ACM, 2007.
动态二进制插桩框架
Valgrind工具 DRD(线程错误检测器)
检测数据竞争5
Valgrind和ThreadSanitizer_第1张图片

多线程编程需要注意的问题:
数据竞争;锁竞争;POSIX线程API使用不当;死锁; 截取的一部分检测结果

(“线程3”)告诉您在上下文中检测到数据竞争的线程的线程ID。
下一行告诉您执行了哪种操作(加载或存储)以及执行了哪种线程。在同一行上,还将显示冲突访问所涉及的起始地址和字节数。
接下来,显示冲突访问的调用堆栈。如果您的程序已使用调试信息(-g)进行编译,则此调用堆栈将包含文件名和行号。
接下来,显示冲突地址的分配上下文。对于动态分配的数据,将显示分配调用堆栈。
Valgrind和ThreadSanitizer_第2张图片

ThreadSanitizer 动态检测技术datarace detection
Serebryany, Konstantin, Iskhodzhanov, T. ThreadSanitizer: data race detection in practice[C]// Workshop on Binary Instrumentation & Applications. ACM, 2009.
ThreadSanitizer是检测数据争用的工具。它由一个编译器检测模块和一个运行时库组成。Thread Sanitizer会记录每一个内存访问的信息,并检测该访问是否参与了竞争。
它不会扫描分析源代码,而是以程序运行中产生的一系列离散的事件点为输入,进行分析,从而找到竞争。最重要的事件就是内存访问和同步。
如果检测到竞争,程序将向stderr打印一条错误消息。
在这里插入图片描述
Valgrind和ThreadSanitizer_第3张图片

你可能感兴趣的:(软件测试,研究方向,堆栈,多线程)