我正在调试一个应用程序(C ++),我在代码中找到了一个要改变值的点(通过调试器)。所以现在,我有一个断点设置,我做了:
它正在触及这个断点,所以我想自动化这个。我想设置Breakpoint来运行一个宏,然后继续执行。
但是,我没有编写VisualStudio宏的经验,因此我不知道修改执行程序变量的命令。我环顾四周,但到目前为止还没有在网上找到任何帮助。
答案 0 :(得分:12)
我发现如何用宏来做这件事。最初,我尝试使用Ctrl-Shift-R来记录键击的宏,但是当我执行Ctrl-Alt-Q时它停止了录制。但我能够编辑宏以使其工作。所以这就是我所做的,以防其他人想要做类似的事情。
右键单击 - >新宏
Public Module RecordingModule
Sub setvalue()
DTE.Debugger.ExecuteStatement("variable_name=0")
End Sub
End Module
这个宏将执行赋值语句,设置我的变量(在这种情况下,使它成为一个NULL指针)。
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;
}