Eli*_*Eli 70 debugging conditional-breakpoint visual-studio
假设我有这个功能:
std::string Func1(std::string myString)
{
//do some string processing
std::string newString = Func2(myString)
return newString;
}
Run Code Online (Sandbox Code Playgroud)
如何在newString具有特定值时设置条件中断?(不改变来源)
设定条件 newString == "my value"
没有工作断点被禁用,错误"找不到重载的运算符"
小智 76
Visual Studio 2010/2012中有一种更简单的方法.
要在ANSI中完成您正在寻找的内容,请使用以下命令:
strcmp(newString._Bx._Ptr,"my value")==0
Run Code Online (Sandbox Code Playgroud)
在unicode中(如果newString是unicode)使用:
wcscmp(newString._Bx._Ptr, L"my value")==0
Run Code Online (Sandbox Code Playgroud)
除了比较之外,你还可以做更多的事情,你可以在这里阅读更多相关内容:
小智 44
有些搜索未能以任何方式执行此操作.建议的替代方法是将测试放在代码中并添加标准断点:
if (myStr == "xyz")
{
// Set breakpoint here
}
Run Code Online (Sandbox Code Playgroud)
或者通过个性角色比较来建立测试.即使查看字符串中的单个字符也有点冒险; 在Visual Studio 2005中,我不得不深入研究成员变量
myStr._Bx._Buf[0] == 'x' && myStr._Bx._Buf[1] == 'y' && myStr._Bx._Buf[2] == 'z'
Run Code Online (Sandbox Code Playgroud)
这些方法都不是非常令人满意.我们应该更好地访问标准库的无处不在的功能.
Rai*_*Rai 27
在 VS2017 中,我能够将条件设置为:
strcmp(&newString[0], "my value") == 0
Run Code Online (Sandbox Code Playgroud)
Adr*_*tos 13
在VS2017中你可以做到
strcmp(newString._Mypair._Myval2._Bx._Buf,"myvalue")==0
Run Code Online (Sandbox Code Playgroud)
虽然我不得不使用类似于Brad的答案来解决这个问题(加上使用DebugBreak()从代码中解脱出来),但有时编辑/重新编译/重新运行一些代码要么太耗时,要么根本不可能.
幸运的是,显然可以插入到std :: string类的实际成员中.这里提到了一种方法- 尽管他特别指出了VS2010,但你仍然可以在早期版本中手动访问各个字符.因此,如果您使用的是2010年,您可以使用不错的strcmp()功能等(更多信息),但如果您像我一样并且仍然拥有2008年或更早版本,那么您可以提出一个破旧,可怕但功能性的替代方案通过设置断点条件,例如:
strVar._Bx._Ptr[0] == 'a' && strVar._Bx._Ptr[1] == 'b' &&
strVar._Bx._Ptr[2] == 'c'
Run Code Online (Sandbox Code Playgroud)
如果strVar中的前三个字符是"abc"则中断.当然,你可以继续使用额外的字符.丑陋..但它刚才给我节省了一点时间.
小智 8
VS2012:
我只是使用下面的条件,因为newString._Bx._Ptr (如在OBWANDO的回答中)引用了非法内存
strcmp( newString._Bx._Buf, "my value")==0
Run Code Online (Sandbox Code Playgroud)
它起作用了......