![]() |
|
![]() ![]() ![]() |
|
Echo78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 21.3.2006 Репутация: нет Всего: нет |
День добрый. Столкнулся с проблемой, связанной с работой __builtin_return_address() и программы addr2line.exe в компиляторе MinGW.
Сначала о цели, которую я преследую. Пишу библиотеку для отслеживания утечек памяти, собственно, она уже давно написана и хорошо работает, принцип работы - перегрузка операторов new/delete. Знаю, что многим здесь это не нравится, но перегрузка происходит только в DEBUG версии программы. Не всегда удаётся получить номер строки и имя модуля при помощи макросов, в этом случае я использую функцию __builtin_return_address(), а нужные мне сведения получаю через addr2line. А проблема вот в чём. В MinGW 3.4.2 (GNU ld version 2.15.91 20040904) всё замечательно работает (компиляция с любым из параметров: -g, -g3, -ggdb3). Проблемы начались, когда я поставил MinGW по-новее: (MinGW version check 3.4.5 GNU ld; GNU Binutils 2.19.1). Перестал нормально отрабатывать addr2line, возвращает только имя модуля и нулевую строку, если использовать при компиляции параметр -g или -g3. Часто выводит искажённое имя текущей функции. Причём это происходит даже в таком коротком примере:
Этот пример в новой версии MinGW работает, если убран #include "commont.h" и не происходит подключение модуля commont.cpp. Стоит их только подключить, и addr2line начинает для этого короткого примера выдавать нулевой номер строки. Если вместо -g или -g3 поставить -ggdb3 проблема исчезает. Весь код привести пока не могу, к проекту через commont.h подключено 2 моих библиотеки, размер достаточно большой. А теперь, внимание, вопрос: Не нравится мне всё это, вот и думаю, в чём может быть дело? Как мне кажется, это баг либо компилятора, коротый неправильно добавляет отладочную информацию в режиме -g в EXE, либо глюки самого addr2line. Может кто из сторожил форума встречал в сети похожую ситуацию? Если это глюки компилятора, то мне надо его менять, а то малоли чего ещё учудит... В общем, жду совета. ![]() |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
Очень долго работаю с Mingw, cygwin, gcc-linux, но о подобной не состыковке впервые слышу...
|
|||
|
||||
Echo78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 21.3.2006 Репутация: нет Всего: нет |
Сегодня наткнулся на что-то похожее:
|
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
Echo78, Ну вот и ответ.
|
|||
|
||||
Echo78 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 21.3.2006 Репутация: нет Всего: нет |
Только у меня вылезало в обычной, а не статической функции. Отправил небольшую заметку в SF.net > Projects > MinGW - Minimalist GNU for Windows > Tracker > Bugs
С воспроизведением проблемы косяк: без моей библиотеки баг не проявляется, хотя библиотека явным образом в приведённом примере не используется. В библиотеке, кстати, есть статические функции, которые вызываются до и после main() (типа глобальных конструкторов и деструкторов). Думаю, что вопрос можно закрыть, надеюсь в следующей версии MinGW они исправят сей досадный баг. Это сообщение отредактировал(а) Echo78 - 27.6.2009, 19:41 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | GNU toolchain | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |