Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюк MinGW 3.4.5 или ошибка addr2line ? addr2line ведёт себя неадекватно 
V
    Опции темы
Echo78
  Дата 27.6.2009, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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. Часто выводит искажённое имя текущей функции. Причём это происходит даже в таком коротком примере:
Код

// #include "commont.h" 
#include <stdio.h> 
 
void foo (void) 

printf ("A=%#lx\n",(unsigned long int) __builtin_return_address(0)); 
return; 

 
 
int main(void) 

printf ("Hello, World\n"); 
foo(); 
return(0); 


Этот пример в новой версии MinGW работает, если убран #include "commont.h"  и не происходит подключение модуля commont.cpp. Стоит их только подключить, и addr2line начинает для этого короткого примера выдавать нулевой номер строки. Если вместо -g или -g3 поставить -ggdb3 проблема исчезает.

Весь код привести пока не могу, к проекту через commont.h подключено 2 моих библиотеки, размер достаточно большой.

А теперь, внимание, вопрос:
Не нравится мне всё это, вот и думаю, в чём может быть дело? Как мне кажется, это баг либо компилятора, коротый неправильно добавляет отладочную информацию в режиме -g в EXE, либо глюки самого addr2line. Может кто из сторожил форума встречал в сети похожую ситуацию? Если это глюки компилятора, то мне надо его менять, а то малоли чего ещё учудит...

В общем, жду совета.  smile 
PM MAIL   Вверх
Andrew121
Дата 27.6.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Очень долго работаю с Mingw, cygwin, gcc-linux, но о подобной не состыковке впервые слышу...
PM MAIL   Вверх
Echo78
Дата 27.6.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Сегодня наткнулся на что-то похожее:
Цитата

I think I have come across a bug in either addr2line or libbfd as distributed with MinGW 3.4.5. It is unable to resolve the symbol names for static functions 

PM MAIL   Вверх
Andrew121
Дата 27.6.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Echo78, Ну вот и ответ.
PM MAIL   Вверх
Echo78
Дата 27.6.2009, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 21.3.2006

Репутация: нет
Всего: нет



Только у меня вылезало в обычной, а не статической функции. Отправил небольшую заметку в SF.net > Projects > MinGW - Minimalist GNU for Windows > Tracker > Bugs 
С воспроизведением проблемы косяк: без моей библиотеки баг не проявляется, хотя библиотека явным образом в приведённом примере не используется. В библиотеке, кстати, есть статические функции, которые вызываются до и после main() (типа глобальных конструкторов и деструкторов).

Думаю, что вопрос можно закрыть, надеюсь в следующей версии MinGW они исправят сей досадный баг.

Это сообщение отредактировал(а) Echo78 - 27.6.2009, 19:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.1013 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.