GNU/Linux >> Znalost Linux >  >> Linux

Podmíněný bod přerušení GDB na libovolných typech, jako je C++ std::string equality

Existuje nějaký způsob, jak bych mohl nastavit podmíněný bod přerušení pro neprimitivní typy?

Ano, jedním ze způsobů, jak to udělat, je převést neprimitivní typ na primitivní, ve vašem případě na char* a použijte strcmp pro porovnání řetězců.

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

Odpověď na vaši otázku, kterou jste položili, je ano...v obecném případě to funguje pro libovolné třídy a funkce a funkce členů třídy. Nezůstanete v testování primitivních typů. Přetížení členů třídy, například operator== , mělo by fungovat.

Ale předpokládám, že problém s tímto případem souvisí s operator== protože std::string je přetížení globálního šablonovaného operátora :

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

Takže deklarace jsou jako:

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

Nepřekvapilo by mě, kdyby gdb nevěděl, jak to za vás spojit.

Všimněte si, že kromě toho, co řekl @ks1322, můžete zůstat v oblasti C++ a jednodušeji použít std::string::compare():

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

Linux
  1. 5 tipů pro GNU Debugger

  2. Existuje grafické uživatelské rozhraní C++ gdb pro Linux?

  3. Podmíněná kompilace v C++ na základě operačního systému

  1. Jak vytvořit dočasný adresář v C++?

  2. Nastavte bod přerušení v kódu C nebo C++ programově pro gdb na Linuxu

  3. Jak vytisknout členy objektu c++ pomocí GDB z adresy, pokud je typ třídy objektu jako A::B

  1. Jak najít soubor, jehož název obsahuje daný řetězec, například „abcde“?

  2. 7 příkladů výkonných operátorů Awk (unární, binární, aritmetické, řetězcové, přiřazení, podmíněné, regulární awk operátory)

  3. sys/types.h:Žádný takový soubor nebo adresář