2010-09-30 27 views
10

¿Cómo se llama al operator<<(std::ostream &os, const ClassX &x) desde dentro de gdb?operador de llamadas << en gdb

En otras palabras, ¿cómo se imprime un objeto en gdb?

call std::cout<<x o call operator<<(std::cout, x) ¡no parece funcionar para mí!

¿Alguna idea?

+0

Escribo el comando 'print' para imprimir variables y objetos. –

+4

Estoy trabajando con una clase en la cual el operador << hace mucho para que la información sea legible, por lo que es un poco molesto usar la impresión y tener datos en bruto. – Ben

Respuesta

10

La única manera que encontré fue esto:

call 'operator<<(std::ostream&, myclass&)'(mycout, c) 

Desde std::cout no era visible para GDB, por alguna razón, he tenido que recurrir a la creación de mi propia así:

std::ostream mycout(std::cout.rdbuf()); 

Usted no ha declarado ninguna razón para querer hacer esto pero no será print yourvariable más fácil?

Si esto es un absoluto debe usted podría tener un método Print en su clase y llamar a que a partir de operator<< y luego llamar al método Print en el objeto del BGF.

Tenga en cuenta que stdout probablemente esté almacenado en gdb por lo que no verá ninguna salida a menos que lo redirija de alguna manera.

Consulte this discusión desde el archivo de correo de gdb sobre este tema.

3

También puede definir una función como:

define printType 
call operator<<(std::ostream&, const $arg0 &)(std::cerr, $arg1) 
end 

Y usarlo como:

TipoImpresión ClassX objectOfClassX

0

Para mí call operator<< corriendo sin error, pero no lo hizo impresión. Resulta que necesitaba una llamada al flush. Aquí hay una función útil que puede poner en .gdbinit:

define str 
    call (void)operator<<(std::cout, $arg0) 
    call (void)std::cout.flush() 
    printf "\n" 
end