我有一个MSVC 6.o工作区,它包含所有C代码 代码在没有任何优化开关的情况下运行,即使用选项O0,并且在调试模式下运行。 此代码来自某些第三方。它按原样执行。
但是当我在某些函数中添加一些printf
语句进行调试,然后执行代码时,它会崩溃。
我怀疑它是某种内存页面/内存段或某种类似的代码/数据溢出。但是代码没有任何内存映射说明符,或者提到段/内存映射等的链接器命令文件。
我如何缩小原因,并解决这个古怪的问题?
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以通过查看Visual Studio中的堆栈跟踪来尝试确定崩溃发生的位置。你应该能够看到最终导致崩溃的函数调用序列是什么,这可能会给你一个关于错误的提示。
printf()单独也可能导致崩溃。一个可能的原因 - 但不太可能在Windows上 - 是一个太小的堆栈,由于对printf()的调用而溢出。
答案 2 :(得分:0)
在printf中打印cstring对象时使用string.getbuffer。 宽字符和普通字符串可能存在问题。 的printf( “%S”,str.Getbuffer()); str.ReleaseBuffer(); 干杯, 阿图。
答案 3 :(得分:0)
通常,在尝试处理崩溃时,您的第一个调用端口应该是调试器。
正确使用,这将使您能够将问题范围缩小到特定的代码行,并希望在崩溃时为您提供运行时内存的视图。这将使您能够看到崩溃的直接原因。