【问题标题】:Strange code crash problem?奇怪的代码崩溃问题?
【发布时间】:2009-04-10 11:56:55
【问题描述】:

我有一个 MSVC 6.o 工作区,其中包含所有 C 代码。
代码在没有任何优化开关的情况下运行,即使用选项 O0,并且处于调试模式。 此代码是从某个第 3 方获得的。它按原样执行。

但是当我在某些函数中添加一些printf语句进行调试,然后执行代码时,它崩溃了。

我怀疑这是内存页/内存段或类似内容的某种代码/数据溢出。但是代码没有任何内存映射说明符,或链接器命令文件提及段/内存映射等。

我如何缩小原因,以及解决这个古怪问题的方法?

【问题讨论】:

    标签: c crash printf


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      您可以通过查看 Visual Studio 中的堆栈跟踪来尝试确定崩溃发生的位置。您应该能够看到最终导致崩溃的函数调用顺序是什么,这可能会提示您出了什么问题。

      也有可能是 printf() 单独导致崩溃。一个可能的原因(但在 Windows 上不太可能)是调用 printf() 时溢出的堆栈太小。

      【讨论】:

        【解决方案3】:

        在 printf 中打印 cstring 对象时使用 string.getbuffer。 宽字符和普通字符串可能存在问题。 printf("%s",str.Getbuffer()); str.ReleaseBuffer(); 干杯, 阿图尔。

        【讨论】:

          【解决方案4】:

          一般来说,当尝试处理崩溃时,您的第一个调用端口应该是调试器。

          如果使用得当,这将使您能够将问题缩小到特定的代码行,并有望在崩溃时为您提供运行时内存的视图。这将使您能够看到崩溃的直接原因。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-07-14
            • 2013-09-24
            • 2013-10-11
            • 2012-10-09
            • 2013-11-16
            • 2019-03-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多