0

所以我正在尝试调试代码。但由于某种原因,它没有通过我需要它的部分。调用这段代码的控制变量是一个指针“*sret”。我尝试了很多,但没有运气。它是一个 C 程序。有没有办法可以在变量上附加观察点?因为它无法识别变量......但它可以识别文件。

4

1 回答 1

0

@禁止,

如果您使用的是 TotalView 调试器,那么这是一个很好的问题。是的,我们确实提供了观察点。但是,它们设置在内存位置,而不是变量。这种区别很重要,因为如果您想象一个递归调用自身的函数以及该函数中的局部变量 X。您可以将程序运行到该函数,在 X 上潜水并在其上设置观察点。如果 X 的特定实例(指向堆栈中的该内存位置)被写入,则观察点将触发。例如,如果函数再次调用自身(这实际上在堆栈中的不同位置创建了一个新的、不同的 X)并且第二个 X 被写入,我们不会停止。

您可能会发现其他一些有用的功能:

  • 您可以直接在调试器中设置变量的值。您可以使用它来验证变量是否具有“正确”值,程序将按照您的预期运行。

  • 您可以在您希望它决定沿着您正在寻找的代码路径进入的程序部分上逐条指令。显示源代码和汇编代码对于这种调试很有用。

  • 如果您使用的是 linux-x86-64 平台,您可能会发现 ReplayEngine 功能很有帮助。这使您可以在程序中向前和向后运行——这可能会帮助您真正缩小范围,以防止程序执行您想要的操作。

让我知道您如何继续调试此问题。如果您以其他方式找到解决方案,我也会对此感到好奇。

祝你好运!

克里斯·戈特布拉斯

Rogue Wave Software TotalView 首席产品经理

电子邮件:roguewave dot com 的第一个 dot last

于 2013-08-29T21:26:20.633 回答