GNU/Linux >> Tutoriales Linux >  >> Linux

Punto de interrupción condicional de GDB en tipos arbitrarios como C++ std::string equality

¿Hay alguna forma de establecer un punto de interrupción condicional en tipos no primitivos?

Sí, una forma de hacerlo es convertir un tipo no primitivo a uno primitivo, en su caso a char* y usa strcmp para comparar cadenas.

condition 1 strcmp(myObject->myStringVar.c_str(),"foo") == 0

La respuesta a su pregunta que hizo es sí ... en el caso general, funciona para clases y funciones arbitrarias, y funciones de miembros de clase. No está obligado a probar tipos primitivos. Sobrecargas de miembros de clase, como operator== , debería funcionar.

Pero supongo que el problema con este caso tiene que ver con el operator== para std::string siendo una sobrecarga de operador con plantilla global :

http://www.cplusplus.com/reference/string/operators/

Así que las declaraciones son como:

template<class charT, class traits, class Allocator>
    bool operator==(const basic_string<charT,traits,Allocator>& rhs,
                const charT* lhs );

No me sorprendería si gdb no supiera cómo conectar los puntos por ti.

Tenga en cuenta que además de lo que dijo @ ks1322, puede permanecer en el ámbito de C++ y más simplemente usar std::string::compare():

condition 1 myObject->myStringVar.compare("foo") == 0

Linux
  1. 5 consejos para el depurador GNU

  2. 7 potentes ejemplos de operadores Awk (operadores Awk unarios, binarios, aritméticos, de cadena, de asignación, condicionales, Reg-Ex)

  3. ¿Hay una GUI de C++ gdb para Linux?

  4. Compilación condicional en C++ basada en el sistema operativo

  5. ¿Cómo crear un directorio temporal en C++?

¿Cómo uso GDB en Eclipse para la depuración de C/C++?

¿Cómo encontrar la ruta completa del programa C++ Linux desde adentro?

linux bash, cadena camel case para separar por guión

Interfaz de línea de comandos de C++

Eliminar todos los caracteres especiales y mayúsculas y minúsculas de la cadena en bash

sys/types.h:No existe tal archivo o directorio