【发布时间】:2020-03-21 14:42:57
【问题描述】:
我有一个(复杂的)多线程应用程序,它会产生一些特定数据的崩溃。崩溃发生在随机位置,很明显崩溃发生的位置不是原因。
所以目前我假设一个非法的内存访问,其中数据被一个线程或类似的东西覆盖。
不幸的是,它只发生在一些较大的数据集上,所以没有办法将整个事情简化为简单的东西。因此,为了找到问题的根本原因,我尝试了 Intel Inspector 2019 - 但它运行缓慢,无法使用。虽然应用程序通常会在使用这些特定数据进行大约 15 分钟的密集计算后显示问题,但在运行该检查器的情况下,我需要等待超过一天 - 而且不确定是否发生崩溃,因为检查器会显着改变整个时间。
所以我的问题是:有没有人有更好的想法/更好的工具来追踪这种非法内存访问的原因?
欢迎安迪的想法!
【问题讨论】:
-
好吧,使用所有其他可用的工具,如 valgrind、cppcheck 或其他静态代码分析工具。修复他们报告的所有问题,因为有时他们是对的......
-
工具推荐是题外话。但是,根据您的描述,这听起来很像竞争条件错误。这些往往是不经常和间歇性的。查看线程之间共享的所有数据。错误位于访问该数据的可能性很高。体面的工具链将让您通过调用堆栈查看每个线程在崩溃时的状态、它们正在执行的行等。
-
您可以尝试使用static code analysis而不是运行时分析
标签: c++ c visual-studio visual-studio-2015 intel-inspector