Visual Studio Breakpoint宏来修改值?

时间:2010-10-06 00:47:55

标签: c++ visual-studio visual-studio-2008 debugging macros

我正在调试一个应用程序(C ++),我在代码中找到了一个要改变值的点(通过调试器)。所以现在,我有一个断点设置,我做了:

  • 调试器到达断点
  • 我修改了我想要更改的变量
  • 我按F5继续运行
  • 泡沫,冲洗,重复

它正在触及这个断点,所以我想自动化这个。我想设置Breakpoint来运行一个宏,然后继续执行。

但是,我没有编写VisualStudio宏的经验,因此我不知道修改执行程序变量的命令。我环顾四周,但到目前为止还没有在网上找到任何帮助。

5 个答案:

答案 0 :(得分:12)

我发现如何用宏来做这件事。最初,我尝试使用Ctrl-Shift-R来记录键击的宏,但是当我执行Ctrl-Alt-Q时它停止了录制。但我能够编辑宏以使其工作。所以这就是我所做的,以防其他人想要做类似的事情。

  • 工具 - >宏 - >宏资源管理器
  • 右键单击 - >新宏

    Public Module RecordingModule
        Sub setvalue()
            DTE.Debugger.ExecuteStatement("variable_name=0")
        End Sub
    End Module
    

这个宏将执行赋值语句,设置我的变量(在这种情况下,使它成为一个NULL指针)。

  • 右键点击BreakPoint - >当命中......
  • 选中“运行宏”
  • 选择Macros.MyMacros.RecordingModule.setvalue
  • 选中“继续执行”
  • 点击确定

然后,我能够运行我的程序,自动将指针调整为NULL。这对于测试非常有用,并且不需要重新编译。

答案 1 :(得分:4)

今天寻找类似的,发现你也可以使用'打印消息:'选项而不是宏。代码中的值可以通过将它们放在{}中来打印。关键是VS还会将内容评估为表达式 - 因此{variable_name = 0}应该与宏示例相同。

答案 2 :(得分:0)

您可以在遇到断点时执行VS宏(打开断点窗口,右键单击有问题的断点,然后在弹出菜单中选择“When Hit ...”)。我不太确定编写一个修改程序变量的宏,但是我从来没有这样做过,尝试录制宏来做这件事的快速尝试似乎没有用(所有这些记录正在激活正确的窗口,而不是更改值。)

答案 3 :(得分:0)

选择“条件...”并在“条件:”文本框中为相关变量写一个赋值。这自然会解决为“真实”,因为它不是一个真正的条件测试。因此,断点永远不会被击中,并且您的变量已相应地设置。

答案 4 :(得分:-1)

如果你以与Microsoft excel相同的方式想到一个宏,那么你就不走运了。它并不是那么有效。

在C ++中,宏指的是使用#define创建的小型内联函数。它是一个预处理器,因此宏就像在其所有引用上使用替换它的主体。

例如:

#define add(a,b) ((a)+(b))

int main() {
  int a=3, b=4, c=5, d=6, e, f;
  d = add(a,b);
  e = add(c,d);
}

希望c ++编译器为:

int main() {
  int a=3, b=4, c=5, ...;
  d = ((a)+(b));
  e = ((c)+(d));
}

现在,回到你的问题。如果变量在此断点的范围内,只需在代码中设置它:

myVar = myValue;

如果不是,但保证存在,你可能需要一点点黑客。假设这个变量是一个int,做一个全局的int指针。如果此变量是静态的,请确保将其设置为其地址,并在其范围内返回NULL。如果它是动态的,您可能需要一些额外的工作。这是一个例子:

int* globalIntPointer;

void func() {
  *globalIntPointer = 3;
  //...
}

int main() {
  int a = 5;
  globalIntPointer = &a;
  func();
  //...
  globalIntPointer = NULL; // for safety sake
  return 0;
}