Pergunta

Quero imprimir todo o comprimento de uma string C em GDB. Por padrão ele está sendo abreviado, como faço para forçar GDB para imprimir a seqüência inteira?

Foi útil?

Solução

set print elements 0

Do manual GDB :

set print elements number-of-elements
Defina um limite de quantos elementos de uma GDB matriz irá imprimir. Se o GDB é a impressão de uma grande variedade, ele pára de impressão depois de ter impresso o número de elementos definidos pelo comando set print elements. Este limite também se aplica à exibição de strings. Quando GDB começa, este limite é definido para 200. Configuração número-of-elementos para zero significa que a impressão é ilimitado .

Outras dicas

Enquanto o programa está em um estado sadio, você pode também call (void)puts(your_string) imprimi-lo na saída padrão. Mesmo princípio se aplica a todas as funções disponíveis para o depurador, na verdade.

Há uma terceira opção: o comando x, que permite que você defina um limite diferente para o comando específico em vez de mudar uma configuração global. Para imprimir os primeiros 300 caracteres de uma string você pode usar x/300s your_string. A saída pode ser um pouco mais difícil de ler. Por exemplo de imprimir os resultados da consulta SQL em:

(gdb) x/300sb stmt.c_str()
0x9cd948:    "SELECT article.r"...
0x9cd958:    "owid FROM articl"...
..

O comando printf irá imprimir as cordas completas:

(gdb) printf "%s\n", string

Apenas para completá-lo:

(gdb) p (char[10]) *($ebx)
$87 =   "asdfasdfe\n"

Você deve dar um comprimento, mas pode alterar a representação de que string:

(gdb) p/x (char[10]) *($ebx)
$90 =   {0x61,
  0x73,
  0x64,
  0x66,
  0x61,
  0x73,
  0x64,
  0x66,
  0x65,
  0xa}

Isto pode ser útil se você deseja depurar pelos seus valores

Usando set elements ... nem sempre é o melhor caminho. Seria útil se houvesse uma set string-elements ... distinto.

Então, eu uso essas funções em minha .gdbinit:

define pstr
  ptype $arg0._M_dataplus._M_p
  printf "[%d] = %s\n", $arg0._M_string_length, $arg0._M_dataplus._M_p
end

define pcstr
  ptype $arg0
  printf "[%d] = %s\n", strlen($arg0), $arg0
end

Advertências:

  • O primeiro é c ++ lib dependente como ele acessa membros da std :: string, mas é facilmente ajustada.
  • O segundo só pode ser usado em um programa em execução, uma vez que as chamadas strlen.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top