假设我有这个功能:

std::string Func1(std::string myString)
{
   //do some string processing 
   std::string newString = Func2(myString)
   return newString;  
}

我该如何设定的条件休息的时候 newString 具有特定的价值?(没有改变源)

设置一个条件 newString == "my value"

没有工作的断点得到了残疾人的错误"超负载操作员没有发现"

有帮助吗?

解决方案

一些网站的搜索已经没有露面任何方式做到这一点。建议的替代方案是把测试你的代码,并添加一个标准的断点:

if (myStr == "xyz")
{
    // Set breakpoint here
}

或者建立从个性比较测试。即使看着字符串中单个字符是一个有点冒险的;在Visual Studio 2005我不得不挖入成员变量等

myStr._Bx._Buf[0] == 'x' && myStr._Bx._Buf[1] == 'y' && myStr._Bx._Buf[2] == 'z'

这两种方法都不是很令人满意。我们应该有标准库的一个普遍特征更好的访问。

其他提示

还有更简单的方式在Visual Studio2010/2012.

来完成你所寻找的在ANSI使用这样的:

strcmp(newString._Bx._Ptr,"my value")==0 

在unicode(如果newString是unicode)使用这样的:

wcscmp(newString._Bx._Ptr, L"my value")==0 

还有更多的事情可以做的不仅仅是一个比较,可以了解更多关于它在这里:

http://blogs.msdn.com/b/habibh/archive/2009/07/07/new-visual-studio-debugger-2010-feature-for-c-c-developers-using-string-functions-in-conditional-breakpoints.aspx

在VS2017可以做

strcmp(newString._Mypair._Myval2._Bx._Buf,"myvalue")==0

虽然我不得不解决此使用类似的东西布拉德的答案(加上使用的的DebugBreak()以从码右断裂),有时编辑/重新编译/重新运行位的代码是耗费过多时间或只是简单的是不可能的。

幸运的是,这是显然能够spelunk到std :: string类的实际成员。一种方法是提到这里 - 尽管他召唤出来VS2010具体而言,您仍然可以手动访问单个字符在早期版本。所以,如果你使用2010,你可以用好的strcmp()功能等(的更多信息),但如果你像我一样而且还有2008年或更早的版本,您可以通过设置断点条件类似拿出一个褴褛的,可怕的,但功能选择:

strVar._Bx._Ptr[0] == 'a' && strVar._Bx._Ptr[1] == 'b' &&
   strVar._Bx._Ptr[2] == 'c'

打破如果在strVar的前三个字符是“ABC”。你可以保持额外的字符去的,当然。丑..但它救了我一点点时间刚才。

VS2012:

我只是用下面的条件,因为newString._Bx._Ptr (如在OBWANDO的答案)引用非法存储器

strcmp( newString._Bx._Buf, "my value")==0

和它的工作...

@OBWANDO(几乎)具有溶液,但作为多个注释正确地指出,实际的缓冲器依赖于字符串大小;我看到16在阈值。前面加上在适当的缓冲液作品大小检查到的strcmp。

newString._Mysize < 16 && strcmp(newString._Bx._Buf, "test value") == 0

newString._Mysize >= 16 && strcmp(newString._Bx._Ptr, "ultra super long test value") == 0

在VS2017,我能够设置的条件为:

strcmp(&newString[0], "my value") == 0

在VS2015可以做

newstring[0]=='x' && newString[1]=='y' && newString[2]=='z'

比较字符串作品比比较字符更好

strcmp(name._Mypair._Myval2._Bx._Buf, "foo")==0

这个工作,但是使用起来非常不方便且容易出错。

name._Mypair._Myval2._Bx._Buf[0] == 'f' && 
name._Mypair._Myval2._Bx._Buf[1] == '0' && 
name._Mypair._Myval2._Bx._Buf[2] == '0'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top