1

我真的迷失在这里了。也许你们中的一些人可以指出我正确的方向。

我正在使用 GCC over MinGW 在 ANSI C 中开发一个工具。该工具只能从命令行运行。可能只在windows机器上。它在本地详细说明一些数据并生成供其他程序使用的文件。基本上它做了很多数学运算和一些文件处理。没什么特别的。我发现没有必要在这里发布整个 1000 多行以供检查......

我用 GCC 编译它,-ansi确保不存在一个警告。随着开发的发展,一切都运行良好。但最近我开始(几乎)随机出现段错误。我检查了最后所做的更改,但一无所获。我删除了最后的更改,完全恢复到它完美工作的时候。仍然是段错误。我逐行追踪。我回去阅读并重新阅读整个代码,以寻找可能的指针/malloc 错误。我根本找不到它经常如此随机地失败的原因。

所以这是奇怪的事情 - 我用 -g 编译它并通过 GDB 运行。

start MSYS
change dir where the program resides
$ gdb generatore.exe (the one compiled -g that fails)
$ run

它在 GDB 中完美运行。我一步一步走过去。逐行。完美的。我试着用大量的数据来强调它。所有作品。无法重现错误。但是,如果从命令行运行相同的可执行文件,它会失败。

我怀疑一些指针的不可预测的行为,但我无法在任何地方找到它。

有没有人遇到过类似的事情?我应该在哪里检查?另外,我对 GDB 不太熟悉,因为它运行平稳,我可以以某种方式强制控制以找出它失败的原因吗?您可以告诉我任何其他免费的 Windows 调试解决方案吗?如何调试不可预测的行为?

非常感谢您的关注,格言

4

1 回答 1

0

有一个很棒的免费工具可以捕获与指针、内存分配、释放等有关的所有类型的运行时错误,这些错误在编译时无法捕获,因此您的编译器不会警告您:valgrind http://valgrind .org/。问题是,AFAIK 它不能在 Windows 上运行。但是,如果您的程序是纯 ANSI C,您应该能够构建它并在 Linux 机器上使用 valgrind 运行它。

我不是 100% 确定它,但它应该在虚拟机中运行正常,所以如果你没有单独的 Linux 计算机,你可以尝试在 Virtual Box 或 VmWare 中安装例如 Ubuntu,并尝试在 valgrind 中运行你的程序它。

于 2012-12-07T14:17:58.623 回答