GDB не может вставить внутреннюю точку останова - PullRequest
2 голосов
/ 05 марта 2012

Я добавил две точки останова в функции одной общей библиотеки (.so), запустил gdb 7.4 и прикрепил его к процессу.

GDB достиг точки останова, и я запустил n на несколько шагов, и GDB сообщил о следующих ошибках (текст полужирный ):

(gdb) b [имя функции]
Точка останова 1 в 0xf1f28a49: файл ../../../../../ имя файла файла] .cpp, строка 167.
Точка останова 2 в 0xf1f2dae5: файл ../../../../../ имя файла_файла] .cpp, строка 60.
предупреждение: было установлено несколько точек останова.
Используйте команду «delete» для удаления нежелательных точек останова.
(GDB) C
Продолжая.
[Новая тема 0xcaafab90 (LWP 28480)]
[Тема 0xcaafab90 (LWP 28480) вышла]
[Новая тема 0xcaafab90 (LWP 29558)]
[Новая тема 0xc8cb6b90 (LWP 29980)]
[Переключение на тему 0xc8cb6b90 (LWP 29980)]

Точка останова 2, [имя функции] (ostr = ..., clientResponse = ..., httpProtocol = ...,> reqType = ...) в ../../../../../ [ имя файла] .cpp: 60
60 ../../../../../ имя файла_файла] .cpp: Нет такого файла или каталога.
в ../../../../../ имя_файла] .cpp
(gdb) ni
0xf1f2daed 60 in ../../../../../[file name] .cpp
(gdb) n

Точка останова 1, [имя функции] (ostr = ..., clientResponse = ..., httpProtocol = ...,> closeConn = ..., asynchResponse = ..., reqType = ...)
в ../../../../../ имя файла файла] .cpp: 167
167 в ../../../../../ имя файла_файла] .cpp
(GDB) N
Внимание:
Невозможно вставить точку останова 0.
Ошибка доступа к адресу памяти 0x36cc6dde: Ошибка ввода / вывода.

0xf7082771 в siglongjmp () из /lib/libc.so.6
(ГБД)

Это вывод из /proc/[PID]/maps:

08048000-08146000 r-xp 00000000 08:03 293876

08146000-08150000 rw-p 000fe000 08:03 293876

08150000-099c8000 rw-p 08150000 00:00 0
[куча]
c21f9000-c21fa000 --- p c21f9000 00:00 0
c21fa000-c29fa000 rwxp c21fa000 00:00 0
c29fa000-c29fb000 --- p c29fa000 00:00 0
……
f1e1b000-f1e24000 rw-p f1e1b000 00:00 0
f1e24000-f2093000 r-xp 00000000 08:03 295549
.so
f2093000-f2094000 --- p 0026f000 08:03 295549
.so
f2094000-f2098000 r - p 0026f000 08:03 295549
.so
f2098000-f209c000 rw-p 00273000 08:03 295549
.so
f209c000-f209d000 rw-p f209c000 00:00 0

Мои вопросы:

  1. GDB не может вставить внутреннюю точку останова для команды ni, но почему он пытается получить доступ к адресу 0x36cc6dde, если текстовый раздел имеет значение 0xf1******? Этот адрес не включается в выходные данные карт как Вы можете видеть.

  2. Более общий вопрос, мне сказали, что разделяемая библиотека начинается в 0x40000000, но почему это не так в моей среде?

Общая библиотека скомпилирована с -fPIC. Я скрываю некоторые имена символов в следах выше.

1 Ответ

0 голосов
/ 24 сентября 2012

Это, вероятно, связано с http://sourceware.org/bugzilla/show_bug.cgi?id=13987. Пожалуйста, не могли бы вы попробовать последнюю версию заголовка FSF GDB (можно получить по адресу: git: //sourceware.org/git/gdb.git).

...