• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pcaldeira

Problema com GDB

9 mensagens neste tópico

Boas,

quando tento debuggar um programa em C com o GDB, ao correr o programa depois de definir um breakpoint através do número da linha, obtenho um erro "Function "" not defined" e o programa não pára no breakpoint. Output detalhado:

pedro@pedro-desktop:~/Desktop/Algoritmos/USACO$ gcc '/home/pedro/Desktop/Algoritmos/USACO/2.2-Subset Sums.c' -o usaco -g

pedro@pedro-desktop:~/Desktop/Algoritmos/USACO$ gdb usaco

GNU gdb 6.6-debian

Copyright © 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB.  Type "show warranty" for details.

This GDB was configured as "i486-linux-gnu"...

Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".

(gdb) b 32

Breakpoint 1 at 0x8048478: file /home/pedro/Desktop/Algoritmos/USACO/2.2-Subset Sums.c, line 32.

(gdb) r

Starting program: /home/pedro/Desktop/Algoritmos/USACO/usaco

Error in re-setting breakpoint 1:

Function "" not defined.

Error in re-setting breakpoint 1:

Function "" not defined.

Isto só acontece quando o breakpoint é definido pelo número da linha; se usar, por exemplo, "b main", o programa pára onde devia e consigo debuggar normalmente.

Alguma ideia de como resolver isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema acontece em qualquer linha, onde quer que o breakpoint seja definido. Anyway, não vou postar o código todo, só uma parte; o breakpoint foi definido na linha assinalada com <<<<<<.

void gotable()
{
...
for(i=1; i<=n; i++) //i = last algarism used
	for(j=1; j<=sum(n); j++) //j = sum
		table[i][j] = table[i][j-1] + (j<=i ? table[i-j][j-1] : 0); //<<<<<<<<<<
...
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta usar

gdb -cd=/home/pedro/Desktop/Algoritmos/USACO/2.2-Subset usaco

Uso o gdb muitas vezes mas não me recordo de ter esse problema.  :hmm:

Se fizeres um breakpoint na main e fizeres step over, o controlo passar por essa linha 32? Eu sei que esta é uma pergunta parva, mas consegues chegar a essa linha com o breakpoint na main?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consigo, sim. Aliás, este problema acontece, como já disse, sempre que o breakpoint é definido pelo número da linha, independentemente da linha onde seja definido. Até agora o que tenho feito é criar uma função vazia (por exemplo, void a() { return; } ) e chamá-la no sítio onde quero o breakpoint, fazendo depois break a. Mas isto é um fix estúpido, e queria ver se resolvia este problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Coloca aqui por favor duas coisas:

  • Depois de settares o breakpoint pela linha, escreve "info b" no gdb e mostra o que surge
  • Faz "b gotable" e de novo o "info b" e vê em que linha foi colocado este novo breakpoint (coloca o que o gdb te mostra)

A minha melhor adivinha é que o gdb não está a colocar o breakpoint onde queres...  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedro@pedro-desktop:~/Desktop/Algoritmia/USACO$ gcc '/home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c' -o usaco -g

pedro@pedro-desktop:~/Desktop/Algoritmia/USACO$ gdb usaco

GNU gdb 6.6-debian

Copyright © 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB.  Type "show warranty" for details.

This GDB was configured as "i486-linux-gnu"...

Using host libthread_db library "/lib/tls/i686/cmov/libthread_db.so.1".

(gdb) b 26

Breakpoint 1 at 0x80484c4: file /home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c, line 26.

(gdb) info b

Num Type          Disp Enb Address    What

1  breakpoint    keep y  0x080484c4 in gotable

                                      at /home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c:26

(gdb) b gotable

Breakpoint 2 at 0x8048444: file /home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c, line 19.

(gdb) info b

Num Type          Disp Enb Address    What

1  breakpoint    keep y  0x080484c4 in gotable

                                      at /home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c:26

2  breakpoint    keep y  0x08048444 in gotable

                                      at /home/pedro/Desktop/Algoritmia/USACO/2.2-Subset Sums.c:19

Parece-me tudo normal...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, uns meses depois, acho que descobri o problema: o nome do ficheiro tinha espaços. Já me tinham desaconselhado o uso de espaços nos nomes dos ficheiros, mas nunca pensei que desse este tipo de problemas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se for isso é um bug tremendo...  :D

É curioso que nunca tenha visto este erro, mas também é natural porque programo sempre em linux e não me recordo de ter no meu ambiente de trabalho habitual pastas ou ficheiros com espaços no nome  :biggrin: Mas ainda bem que foi descoberto o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora