1

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

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

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

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

4

4 回答 4

1

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

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

于 2009-04-10T13:35:36.927 回答
1

在 Linux 上,我喜欢valgrind。这是Windows 上类似 valgrind 的工具的 Stack Overflow 线程

于 2009-04-10T12:13:47.777 回答
0

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

于 2009-04-10T12:15:47.977 回答
0

通常,在尝试处理崩溃时,您的第一个调用端口应该是调试器。

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

于 2009-08-26T16:32:48.697 回答