在C中查找调试功能

在C中查找调试功能,c,debugging,memory,C,Debugging,Memory,我相信我的代码有一些内存错误,因为我的代码是“随机”的,在这个意义上,几乎每运行一次,一个大型固定数组中的字符串都会被破坏。(已修复,从某种意义上说,它应该始终保持不变。但问题发生在我初始化其值时。) 我想知道,是否有一个调试器具有一个特性,可以让我并行运行相同的代码,并在两次运行之间出现差异时提醒我 (我在linux上工作,我的项目是C语言的,我目前正在用GDB进行调试。我尝试过运行valgrind,但在边缘情况下我有太多的内存没有被释放。)一个好的开始是在下面运行应用程序并查看其报告。一个好

我相信我的代码有一些内存错误,因为我的代码是“随机”的,在这个意义上,几乎每运行一次,一个大型固定数组中的字符串都会被破坏。(已修复,从某种意义上说,它应该始终保持不变。但问题发生在我初始化其值时。)

我想知道,是否有一个调试器具有一个特性,可以让我并行运行相同的代码,并在两次运行之间出现差异时提醒我


(我在linux上工作,我的项目是C语言的,我目前正在用GDB进行调试。我尝试过运行valgrind,但在边缘情况下我有太多的内存没有被释放。)

一个好的开始是在下面运行应用程序并查看其报告。

一个好的开始是在下面运行应用程序并查看其报告。

而不是比较两次运行(可能不受支持)为什么不在对大型阵列的任何写入上设置断点呢?有一种称为“增量调试”的技术可以解决这种情况。“我不知道它是否已经生产出来了。”杰瑞-我已经澄清了我上面所说的“修复”是什么意思。事实上,我在问题中简化了很多东西,所以问题实际上是在从文件中读取一行和解析它之间的某个地方。。。在您第一次初始化之后,您在例如
somestring[12]!='x'
或类似的东西。当
somestring[12]
更改时,调试器将中断。您说过您认为您的代码存在内存错误。这是一个相当含糊的说法。valgrind使用合适的开关可以发现每一个与堆相关的错误。您应该做的是使用不同的开关使用valgrind--tool=memcheck。如果您的代码在静态分配的空间(全局存储或堆栈中)中存在问题,那么最好的解决方案是将gdb与硬件监视点一起使用。而不是比较两次运行(可能不受支持)为什么不在对大型阵列的任何写入上设置断点呢?有一种称为“增量调试”的技术可以解决这种情况。“我不知道它是否已经生产出来了。”杰瑞-我已经澄清了我上面所说的“修复”是什么意思。事实上,我在问题中简化了很多东西,所以问题实际上是在从文件中读取一行和解析它之间的某个地方。。。在您第一次初始化之后,您在例如
somestring[12]!='x'
或类似的东西。当
somestring[12]
更改时,调试器将中断。您说过您认为您的代码存在内存错误。这是一个相当含糊的说法。valgrind使用合适的开关可以发现每一个与堆相关的错误。您应该做的是使用不同的开关使用valgrind--tool=memcheck。如果您的代码在静态分配的空间(在全局存储或堆栈中)中存在问题,那么最好的解决方案是将gdb与硬件监视点一起使用。