MAP-файлы

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

MAP-файлы

Сообщение unC0Rr » 19.06.2006 01:57:58

Здравствуйте! Я столкнулся с такой проблемой: программа компилируется и работает в Delphi, но при компиляции фрипаскалем творится нечто странное: 1) в одной из процедур происходит переполнение стека... размер стека я увеличил, программа вроде бы идёт дальше, но! 2) где-то она зацикливается... проблема в том, что я никак не могу выяснить это место: программу запустить из-под дебагера не получится, из-за сложного взаимодействия с другим процессом при запуске. С помощью аттача к этому процессу из Delphi я узнал адреса инструкций, по которым бегает зацикленная программа. Но! По этим адресам не могу сказать в какой я функции нахожусь, потому что .map файлы фрипаскаль похоже не умеет генерировать (в документации и интернете ничего по вопросу не нашёл). Пробовал аттачиться при помощи gdb, но он всплывает где-то в недрах ntdll (как и Delphi в общем-то) и дотрейсить до самой программы похоже невозможно, или терпения не хватает ;)
Подскажите, как быть! Для счастья мне хватило бы map.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Sergei I. Gorelkin » 19.06.2006 17:05:12

-k-Map -kmy_super_map.map в командной строке должно помочь. my_super_map.map - это имя создаваемого файла...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение unC0Rr » 19.06.2006 17:24:00

Большое спасибо! карта действительно помогла.... узнать, что зацикливание происходит в недрах RTL... а именно, SYSTEM_READNUMERIC$TEXT$openshortstring... где-то тут кроются глюки фрипаскаля....
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Sergei I. Gorelkin » 19.06.2006 17:44:26

Кстати говоря... Недавно был багрепорт http://www.freepascal.org/mantis/view.php?id=7010, связанный с чтением данных из файлов. Автор утверждал, что глюки появлялись только на определенных процессорах. Однако ж пока вопрос повис в воздухе. Поэтому, если удастся локализовать неправильно работающий кусок программы - это могло бы оказать неоценимую услугу всем ;)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение unC0Rr » 19.06.2006 21:26:03

Я нашёл, где проблема...
Код: Выделить всё
Read(f, x, y, w, h);
f - файл, остальные переменные - числа. Бинарник зацикливается "внутри" этой строчки, если нет перехода на новую строку (символа конца файла тоже нет). Не знаю, зависит ли от процессора, у меня PIV.
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Sergei I. Gorelkin » 19.06.2006 22:19:09

А немного подробнее можно, если не затруднит? Т.е. какие числа (целые, вещественные или вперемешку)? Файл многострочный? Если да, то какие там концы строк (DOS/UNIX)? Какие версии FPC и операционки?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение unC0Rr » 19.06.2006 23:45:36

Числа все целые, написаны каждое через один пробел, файл многострочный, зацикливается именно на последней строке, концы строк DOS, FPC 2.0.0, WinXP
unC0Rr
новенький
 
Сообщения: 59
Зарегистрирован: 02.02.2006 03:44:44

Сообщение Sergei I. Gorelkin » 21.06.2006 15:38:27

У товарища подозрительно похожий файл - тоже оборванная последняя строка... Но у меня его пример работает нормально, и сколько я ни баловался с размером файла (есть подозрение, что эффект может быть связан с длиной буфера) - зациклить, увы, не смог.

Вообще, со времен FPC 2.0.0 исправлено уже довольно много багов. В том числе есть и исправление в ф-ции NextChar, которая вызвается в цикле из ReadNumeric. Так что я бы порекомендовал апгрейд до 2.0.2 или даже 2.0.3 - чем черт не шутит...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: MAP-файлы

Сообщение vay » 24.09.2009 10:23:21

такой вопрос, у меня fpc 2.2.4, в командую строку сборки проекта добавляю -k-Map -kmap.map , но никакого map.map не появляется, а тот который генерируется с ключем -Xm - не имеет информации о адресах строк в коде, чтобы адекватно увязать адрес exception. (из call stack)

Не посоветуете какого либо решения для получения именно номеров строк? Заранее спасибо.
vay
новенький
 
Сообщения: 22
Зарегистрирован: 06.07.2009 17:56:46


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru