【问题标题】:Find illegal memory access in Visual Studio在 Visual Studio 中查找非法内存访问
【发布时间】:2020-03-21 14:42:57
【问题描述】:

我有一个(复杂的)多线程应用程序,它会产生一些特定数据的崩溃。崩溃发生在随机位置,很明显崩溃发生的位置不是原因。

所以目前我假设一个非法的内存访问,其中数据被一个线程或类似的东西覆盖。

不幸的是,它只发生在一些较大的数据集上,所以没有办法将整个事情简化为简单的东西。因此,为了找到问题的根本原因,我尝试了 Intel Inspector 2019 - 但它运行缓慢,无法使用。虽然应用程序通常会在使用这些特定数据进行大约 15 分钟的密集计算后显示问题,但在运行该检查器的情况下,我需要等待超过一天 - 而且不确定是否发生崩溃,因为检查器会显着改变整个时间。

所以我的问题是:有没有人有更好的想法/更好的工具来追踪这种非法内存访问的原因?

欢迎安迪的想法!

【问题讨论】:

  • 好吧,使用所有其他可用的工具,如 valgrind、cppcheck 或其他静态代码分析工具。修复他们报告的所有问题,因为有时他们是对的......
  • 你试过debug your crash dump吗?
  • 工具推荐是题外话。但是,根据您的描述,这听起来很像竞争条件错误。这些往往是不经常和间歇性的。查看线程之间共享的所有数据。错误位于访问该数据的可能性很高。体面的工具链将让您通过调用堆栈查看每个线程在崩溃时的状态、它们正在执行的行等。
  • 您可以尝试使用static code analysis而不是运行时分析

标签: c++ c visual-studio visual-studio-2015 intel-inspector


【解决方案1】:

您可以使用应用程序验证程序。在 Basics 选项下选择 Heaps(with Full) 并在 WinDbg 下运行您的程序。您可以找到崩溃发生的确切位置。 注意:它会很慢,但会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 2021-11-22
    • 1970-01-01
    • 2013-07-28
    • 2020-12-27
    • 2015-04-02
    • 2019-11-05
    • 2018-12-27
    相关资源
    最近更新 更多