【问题标题】:Run-Time Error Checks /RTCs运行时错误检查/RTC
【发布时间】:2011-05-06 13:32:32
【问题描述】:

我在应用程序的 /RTCs 中启用了检测堆栈损坏问题。该应用程序有许多组件(dll),总 LOC 约为 40K。它有很多线程。

最初我在执行 18000 次循环后遇到了崩溃。但是在启用 /RTCs 选项后,我可以在 100 个循环内获得汽车。崩溃总是发生在一个名为 Reciever Thread 的线程中。但它在 3 或 4 个位置始终崩溃。当崩溃发生时,在某些情况下,几乎所有局部变量看起来都已损坏。但我无法确定根本原因,因为我看不到崩溃发生点周围的任何问题。

我可以做些什么来缩小堆栈损坏的范围?
代码有try catch语句,会不会妨碍查明原因?

请帮帮我

谢谢!

【问题讨论】:

    标签: c++ memory windbg


    【解决方案1】:

    编辑:您是否使用优化:

    如果您在 使用任何 /RTC 的命令行 编译器选项,任何编译指示优化 您的代码中的说明将 默默地失败。这是因为 运行时错误检查在 发布(优化)版本。

    您应该使用 /RTC 进行开发 构建; /RTC 不应用于 零售构建。 /RTC 不能与 编译器优化(/O 选项 (优化代码))。程序图像 用 /RTC 构建会稍微 比 使用 /Od 构建的图像(最多 5% 比 /Od 构建慢)。

    没有你发布任何代码,我只能推荐通用工具。

    我在 Linux 上使用valgrind --tool=helgrind 来处理这种事情,但我从你的问题猜测你是在 Windows 上。

    您可能会发现这个问题的答案很有用:Is there a good Valgrind substitute for Windows?

    (如果您在遇到问题的地方发布代码或指出您使用了哪些方法来保护似乎已损坏的变量(互斥锁等......),这可能会有所帮助)

    【讨论】:

    • 不,我没有使用任何优化。但构建是发布构建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2011-03-10
    • 2014-10-29
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多