GNU/Linux >> Linux Esercitazione >  >> Linux

Punto di interruzione condizionale GDB su tipi arbitrari come C++ std::string equality

C'è un modo per impostare un punto di interruzione condizionale su tipi non primitivi?

Sì, un modo per farlo è convertire il tipo non primitivo in uno primitivo, nel tuo caso in char* e usa strcmp per confrontare le stringhe.

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

La risposta alla tua domanda che hai posto è sì ... nel caso generale funziona per classi e funzioni arbitrarie e funzioni membro di classe. Non sei bloccato con il test dei tipi primitivi. Overload dei membri della classe, come operator== , dovrebbe funzionare.

Ma immagino che il problema con questo caso abbia a che fare con il operator== per std::string che è un sovraccarico di operatori basati su modelli globali :

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

Quindi le dichiarazioni sono come:

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

Non sarei sorpreso se gdb non sapesse come collegare i punti per te.

Nota che oltre a quanto detto da @ks1322, potresti rimanere nel regno C++ e usare più semplicemente std::string::compare():

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

Linux
  1. Strano errore di segmentazione SIGSEGV nel metodo std::string::assign() da libstdc++.so.6

  2. Come trovare il percorso completo del programma C++ Linux dall'interno?

  3. linux bash, stringa camel case da separare con un trattino

  4. Interfaccia a riga di comando C++

  5. Rimuovi tutti i caratteri speciali e le maiuscole dalla stringa in bash

5 suggerimenti per GNU Debugger

Come trovare un file il cui nome include una determinata stringa, ad esempio "abcde"?

Esiste una GUI gdb C++ per Linux?

Esame delle statistiche sulla memoria heap C/C++ in gdb

Come utilizzo GDB in Eclipse per il debug C/C++?

sys/types.h:file o directory non presenti