【发布时间】:2012-09-05 04:45:06
【问题描述】:
我相信我的代码存在一些内存错误,因为我的代码行为“随机”,几乎每次运行时,大型固定数组中的字符串都会被破坏。 (已修复,在某种意义上它应该始终相同。但是在我初始化它的值时会出现问题。)
我想知道,是否有一个调试器具有使我能够并行运行相同代码并在两次运行之间存在差异时提醒我的功能?
(我在 linux 上工作,我的项目是 C 语言,我目前正在使用 GDB 进行调试。我尝试运行 valgrind,但在边缘情况下我有太多内存没有被释放。)
【问题讨论】:
-
为什么不比较两次运行(可能不支持)而不是在任何写入大数组时设置断点?
-
有一种称为“增量调试”的技术可以解决这种情况。不知道有没有产品化。
-
@Jerry- 我已经澄清了我上面固定的意思。实际上我已经在问题中简化了很多事情,所以问题实际上是在从文件中读取一行和解析它之间的某个地方。
-
Watchpoints... 在你第一次初始化之后,你在 e.g.
somestring[12] != 'x'或类似的东西。当somestring[12]更改时,调试器将中断。 -
您说您认为您的代码存在内存错误。这是一个相当模棱两可的说法。带有合适开关的 valgrind 可以发现每个与堆相关的错误。您应该做的是使用 valgrind --tool=memcheck 使用不同的开关。如果您的代码在静态分配的空间(全局存储或堆栈中)有问题,那么最好的解决方案是使用带有硬件观察点的 gdb。