Visual Studio断点宏是否要修改值? 我调试了一个应用程序C++,我在代码中找到了一个点,我想通过调试器来改变一个值。现在,我已经设置了一个断点,因此我: 调试器到达断点 我修改了要更改的变量 我按F5继续跑步 起泡、冲洗、重复

Visual Studio断点宏是否要修改值? 我调试了一个应用程序C++,我在代码中找到了一个点,我想通过调试器来改变一个值。现在,我已经设置了一个断点,因此我: 调试器到达断点 我修改了要更改的变量 我按F5继续跑步 起泡、冲洗、重复,c++,visual-studio,visual-studio-2008,debugging,macros,C++,Visual Studio,Visual Studio 2008,Debugging,Macros,它经常碰到这个断点,所以我想自动化它。我想设置断点来运行宏,然后继续执行 但是,我没有编写VisualStudio宏的经验,因此我不知道修改执行程序变量的命令。我到处找了找,但到目前为止还没有在网上找到任何有用的东西。如果你用与Microsoft excel相同的方式来看待宏,那么你就不走运了。那样不太管用 C++中,宏指的是用定义创建的小内联函数。它是一个预处理器,因此宏就像在其主体的所有引用上使用替换一样 例如: #define add(a,b) ((a)+(b)) int main()

它经常碰到这个断点,所以我想自动化它。我想设置断点来运行宏,然后继续执行


但是,我没有编写VisualStudio宏的经验,因此我不知道修改执行程序变量的命令。我到处找了找,但到目前为止还没有在网上找到任何有用的东西。

如果你用与Microsoft excel相同的方式来看待宏,那么你就不走运了。那样不太管用

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

例如:

#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;
}

当遇到断点时,可以执行VS宏打开“断点”窗口,右键单击有问题的断点,然后选择when hit。。。关闭弹出菜单。不过,我不太确定是否要编写一个宏来修改调试中的程序变量——我从来没有这样做过,尝试录制一个宏似乎不起作用——所有录制的宏都是激活正确的窗口,而不是更改值。

我找到了如何使用宏来实现这一点。起初,我尝试使用Ctrl-Shift-R录制一个按键宏,但当我使用Ctrl-Alt-Q时,它停止了录制。但我能够编辑宏使其工作。这就是我所做的,以防其他人想做类似的事情

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

Public Module RecordingModule
    Sub setvalue()
        DTE.Debugger.ExecuteStatement("variable_name=0")
    End Sub
End Module
此宏将执行赋值语句,在本例中设置我的变量,使其成为空指针

右键单击断点->点击时。。。 选中“运行宏” 选择Macros.MyMacros.RecordingModule.setvalue 检查是否继续执行 单击“确定”
然后,我可以运行我的程序,在运行时自动将指针调整为NULL。这对于测试非常有用,并且不需要重新编译。

现在正在查找类似内容,发现您也可以使用“打印消息:”选项而不是宏。代码中的值可以通过将它们放置在{}中来打印。关键是VS还将以表达式形式计算内容-因此{variable_name=0}应达到与宏示例相同的效果。

选择条件。。。并在条件文本框中为相关变量编写赋值。这将自然解决为真,而不是实际的条件测试。因此,断点永远不会被命中,并且您的变量也会被相应地设置。

否。否。他想知道如何使用Visual Studio宏来执行此操作,该宏可以在命中断点时运行,而无需修改代码。这是一个很好的答案,但是OP正在寻求有关编写/录制Visual Studio宏的帮助。正如其他人所说,我想要一个Visual Studio宏与Excel或定义无关如何修改变量?e、 g.递增一个计数器。我有一个指针,我想把它设为空。是的,我试着录制一个宏来执行Ctrl-Alt-Q,但当窗口出现时,它停止了录制。@Tim:可以在代码中添加一行或两行来执行赋值吗?我正在试图找到一种不强制完全重新编译的方法。但我确实找到了一种方法,所以我将与大家分享。在Visual Studio 2015中不再如此:我尝试了它并收到了一个礼物:无法设置断点。此表达式有副作用,将不进行计算。