Pregunta

Supongamos que tengo esta función:

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

¿Cómo se configura un descanso condicional cuando newString tiene un valor específico? (Sin cambiar la fuente)

establecer una condición newString == "my value"

no trabajar los puntos de interrupción obtuve de lesionados con un error de "operador sobrecargado no encontrado"

¿Fue útil?

Solución

Algunos búsqueda no ha logrado subir alguna manera de hacer esto. Las alternativas sugeridas son para poner la prueba en el código y añadir un punto de interrupción estándar:

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

O para construir su prueba de comparaciones de caracteres individuales. Incluso se analizan los personajes individuales en la cadena es un poco incierto; en Visual Studio 2005 que tenía que cavar hacia abajo en las variables miembro como

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

Ninguno de estos enfoques es muy satisfactorio. Debemos tener un mejor acceso a una característica ubicua de la biblioteca estándar.

Otros consejos

Hay una manera mucho más fácil en Visual Studio 2010/2012.

Para lograr lo que busca en ANSI usar esto:

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

Y en Unicode (si fuera newString Unicode) utiliza la siguiente:

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

Hay más cosas que puede hacer que un simple comparar, se puede leer más sobre esto aquí:

http://blogs.msdn.com/b/habibh/archive/2009/07/07/new-visual-studio-debugger-2010-feature-for-cc -developers-utilizando cuerdas-funciones-en-condicional-breakpoints.aspx

En VS2017 que puede hacer

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

Si bien he tenido que trabajar alrededor de este uso de algo similar a la respuesta de Brad (más usando DebugBreak () para romper la derecha desde el código), a veces la edición / recompilar / volver a ejecutar un poco de código es demasiado lento o simplemente imposible.

Por suerte, al parecer es posible spelunk en los usuarios reales de la clase std :: string. Una forma es mencionado aquí - y aunque se dice en voz alta VS2010 en concreto, todavía se puede acceder a caracteres individuales de forma manual en las versiones anteriores. Así que si usted está utilizando el 2010, sólo puede utilizar las funciones agradables strcmp() y similares ( más información) , pero si eres como yo y todavía tienen 2008 o más temprano, se puede llegar a una alternativa andrajoso, terrible, pero funcional mediante el establecimiento de un punto de interrupción condicional algo como:

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

a romperse si los tres primeros caracteres de strVar son "abc". Puede seguir adelante con caracteres adicionales, por supuesto. Fea .. pero me ha ahorrado un poco de tiempo en este momento.

VS2012:

acabo de utilizar la condición de abajo porque newString._Bx._Ptr (como en la respuesta de OBWANDO) referencia a la memoria ilegal

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

y funcionó ...

@OBWANDO (casi) tiene la solución , sino como varios comentarios señalan con razón, el búfer real depende de la tamaño de la cadena; Veo 16 al ser el umbral. Anteponer un cheque tamaño a la strcmp en las obras de tampón apropiadas.

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

o

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

En VS2017, yo era capaz de establecer la condición como:

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

En VS2015 que puede hacer

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

string Comparando funciona mejor que la comparación de caracteres

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

Esto funciona, pero es muy incómodo de usar y propenso a errores.

name._Mypair._Myval2._Bx._Buf[0] == 'f' && 
name._Mypair._Myval2._Bx._Buf[1] == '0' && 
name._Mypair._Myval2._Bx._Buf[2] == '0'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top