LINUX.ORG.RU

Вопрос о GDB


0

0

Почему gdb не показывает нормальный backtrace? Какие-то знаки вопроса только :(

versus@dot:~/opt/jpeg$ ./main
Segmentation fault

versus@dot:~/opt/jpeg$ gdb ./main
gdb: Symbol `emacs_ctlx_keymap' has different size in shared object, consider re
-linking
GNU gdb 2002-04-01-cvs
Copyright 2002 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 "i386-linux"...
(gdb) run
Starting program: /home/versus/opt/jpeg/main

Program received signal SIGSEGV, Segmentation fault.
0x40104f9d in ?? ()
(gdb) backtrace
#0  0x40104f9d in ?? ()
#1  0x401e1b3a in ?? ()
#2  0x401e1869 in ?? ()
#3  0x401e0740 in ?? ()
#4  0x401d3650 in ?? ()
#5  0x40026695 in ?? ()
#6  0x40026068 in ?? ()
#7  0x80000c6f in ?? ()
#8  0x400a9dc6 in ?? ()

Ответ на: комментарий от anonymous

Нет, боюсь что дело не в этом...

Makefile:
---------------------------------------------------------------------
CXXFLAGS := -Wall -g
BINARIES := main libjpg.so

all: libjpg.so main

main: main.cpp
        g++ $(CXXFLAGS) -L. -o main $^ -ldl -ljpg

libjpg.so: jpeg.o
        g++ $(CXXFLAGS) -o libjpg.so -shared -fPIC $^ -ljpeg

jpeg.o: jpeg.cpp
        g++ $(CXXFLAGS) -c -fPIC $^

clean:
        rm -f *.o $(BINARIES)
---------------------------------------------------------------------

versus@dot:~/opt/jpeg$ make
g++ -Wall -g -c -fPIC jpeg.cpp
g++ -Wall -g -o libjpg.so -shared -fPIC jpeg.o -ljpeg
g++ -Wall -g -L. -o main main.cpp -ldl -ljpg

versus
() автор топика
Ответ на: комментарий от alphex_kaanoken

и никак не лечится?

конечно, в конце концов, нашел в чем проблема у меня была - слишком мало памяти malloc-ировал.

versus
() автор топика
Ответ на: комментарий от versus

>и никак не лечится?

если стек рушиться то надо срочно выпрямлять руки и править ошибки в коде! =) и запоминать такие вещи - те не попадаться в следующий раз =)

>конечно, в конце концов, нашел в чем проблема у меня была - слишком мало памяти malloc-ировал.

ну вот и нашел причину;

alphex_kaanoken ★★★
()
Ответ на: комментарий от alphex_kaanoken

>если стек рушиться то надо срочно выпрямлять руки и править ошибки в >коде! =) и запоминать такие вещи - те не попадаться в следующий раз >=)

А вы не могли бы примерчик привести для разрушения стека? Уж больно интересно посмотреть на этого зверя.

versus
() автор топика
Ответ на: комментарий от versus

versus (30.11.2004 20:29:22):

>...примерчик привести для разрушения стека? Уж больно 
> интересно посмотреть на этого зверя.

int one(void)
{
  int a=3;
  int *c=&a;

  c[2]=0xFFFFFFFF;

  return a-3;
}

int two(void)
{
  int b=1;
  return one()+b;
}

int main(void)
{
int a=1;
int b=two();

return a+b;
}

Результат:

Program received signal SIGSEGV, Segmentation fault.
0xffffffff in ?? ()
(gdb) where
#0  0xffffffff in ?? ()
#1  0x08048368 in main () at trystack.c:20
#2  0x400434a2 in __libc_start_main () from /lib/libc.so.6

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.