在解除引用的指针的地址上设置Visual Studio 2005中的数据断点

时间:2008-10-08 17:55:42

标签: c++ c visual-studio-2005 debugging

我想知道是否有办法执行以下操作:我有一个包含成员的结构,当我将结构传递给API函数时,该结构是指向内核分配的内存块的指针(结构是WAVEHDR,该成员是保留字段。)

我可以在保留成员的值上设置数据断点 - 这本身并不是很有帮助。当断点被击中时,我想要做的是取消引用存储在保留中的指针,并在该指针指向的内存上设置新的数据断点。当内存设置为已知值时,我希望VisualStudio中断。

我知道如何从宏设置断点,以及如何让Visual Studio在断点时从断点调用该宏,但我不知道是否可以将指针值传递给宏以便它可以在正确的地址上设置断点。用户界面没有提供这样做的方法。

宏是否有办法访问有关正在运行的程序的信息,并执行评估全局变量或其他表达式的操作?如果我从宏中对编程访问运行代码(在断点期间),我可以完成我想要做的事情。

2 个答案:

答案 0 :(得分:2)

宏可以在观察窗口中评估任何内容:

    Dim e As EnvDTE.Expression

    e = DTE.Debugger.GetExpression("<my expression>", True)

    If e.IsValidValue Then
        ... use e.Value to do something
    End If

您在e.Value中获得的值正是您在观察窗口中看到的字符串,因此您可能需要将它拉开。您可以使用Expression对象上还有许多其他属性。请参阅MSDN documentation

答案 1 :(得分:0)

我不确定这是否可行。我知道有条件断点,但这需要提前知道内存地址......

条件中断对话框中的* p == 0xADDRESS行。