LINUX.ORG.RU

GCC, C++: работа с дебажным GLIBC


0

2

Всем привет!

Люди! Просветите, как правильно сделать под Линуксом дебажную конфигурацию. Сам я Windows-программист, поэтому за глупые вопросы не бейте :-) Работаю под CentOS 5.5, GCC 4.1.2. Задался вопросом, как забилдить дебажный проект, чтобы и свой код был полностью пригодным для отладки и в библиотечный можно было входить. Билжу дебаг вот так:

COMPILE=g++ -c "-D_GLIBCXX_DEBUG" -g -O0 -fno-inline -o «$(OUTDIR)/$(*F).o» $(CFG_INC) $<

LINK=g++ -g -L/usr/lib/debug/usr/lib -o «$(OUTFILE)» $(ALL_OBJ)

Поставил дебажные RPM-пэкиджы. 1. Подключил руками репозиторий: CentOS-Debug.repo into /etc/yum.repos.d/

#Debug Info

[debuginfo]

name=CentOS-$releasever - DebugInfo

# CentOS-5

baseurl=http://debuginfo.centos.org/$releasever/$basearch/

#baseurl=

http://debuginfo.centos.org/

$releasever/

gpgcheck=0

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

protect=1

priority=1

2. Запустил yum --disablerepo «*» --enablerepo «debuginfo» install glibc-debuginfo glibc-debuginfo-common gcc-debuginfo

Либы встали. glibc 2.5.-49

Теперь, если добавляю -L/usr/lib/debug/usr/lib, то GDB заходит в исходники, правда, моё приложение падает с Segmentation fault во время завершения в CRT-коде в exit.

Однако, запускаю LDD и вижу, что приложение слинковано с релизными либами:

linux-gate.so.1 => (0x00fd7000)

libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x02839000)

libm.so.6 => /lib/libm.so.6 (0x00c54000)

libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x02702000)

libc.so.6 => /lib/libc.so.6 (0x00ad9000)

/lib/ld-linux.so.2 (0x00aba000)

В GDB также пытался смотреть: «info sharedlibrary». Тоже самое.

В общем, не понятен принцип, как оно в Линуксе должно работать и почему у меня начал падать код с Segmentation F. Приложение - простейшее тестовое консольное приложение.

С уважением, Алексей



Последнее исправление: alexf2 (всего исправлений: 3)

Что такое «забилдить дебажный»? Вам нравятся иностранные языки, но вы смогли осилить лишь иностранные слова, но не справились с иностранной грамматикой?

anonymous
()

Тебе что отлаживать-то? Если свое приложение, то зачем тебе дебаг-версия libc? Вполне можно отлаживаться с релизной, и в 99% случаев дебажная libc не нужна. Я не думаю, что ты столкнулся с багом libc, правда?
Просто компилируй/линкуй свое приложение с флагом -g - и все будет ОК.

Vamp
()

> Однако, запускаю LDD и вижу, что приложение слинковано с релизными либами:

То, что приложение слинковано с релизными либами, не означает, что именно с ними оно будет загружено в память. У библиотеки есть одно символическое имя и может быть множество разных реализаций. Более того, на одной системе одновременно могут работать два процесса, слинкованные с разными реализациями одной и той же библиотеки.


В общем, не понятен принцип, как оно в Линуксе должно работать


Надо просто линковать с -g

и почему у меня начал падать код с Segmentation F.


В приложении ошибка. К.О.

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

> слинкованные с разными реализациями одной и той же библиотеки.

Т.е. слинкованные с одной либой, но загруженные в память с разными реализациями.

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

>То, что приложение слинковано с релизными либами, не означает, что именно с ними оно будет загружено в память.
ldd показывает, с какими именно либами приложение будет «загружено в память» (выражаясь твоими словами) в текущем окружении.

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