Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
В map-файле есть длиинная последовательность вида 15.07.08 10:00 Число просмотров: 1592
Автор: Ustin <Ustin> Статус: Elderman Отредактировано 15.07.08 10:06 Количество правок: 1
|
> Тебе надо просто взять *.map, для которого у тебя есть дамп > и найти в нем последнюю функцию, которая далее вызывает > EnumFontFamiliesEx. Для того дампа, который ты выложил – > вызов идет с адреса “buh+0x60cdbe”. Т.е. в файле *.map надо > найти самое близкое значение, меньшее чем 60cdbe. Это и > будет функция, в которой все падает. В map-файле есть длиинная последовательность вида
Address Publics by Name
0001:00AC3E44 AAMake..TAAMakeForm
0004:0000B498 AAMake.AAMakeForm
...
---
, а в конце написано Program entry point at 0002:00021748
Как соотнести “buh+0x60cdbe” с 0001:00AC3E44? Адресов порядка 60cс00 - 60ce00 в .map не нашёл...
> > В-третьих. Сдается мне, что здесь - даже и без *.map файла > - все понятно. > Ваша программа вызывает системную функцию > EnumFontFamiliesEx. Одним из параметов EnumFontFamiliesEx > является callback-функция (функция обратного вызова; т.е, > программист сам эту функцию не вызывает, она вызывается > системой Windows). И эта callback-функция у вас написана с > ошибкой. Возможно, в ней не проверяются входные параметры. > Или она не обьявлена как экпортируемая. Или она обьявлена > как fastcall. Или она пишет в область памяти, которая не > проинициализирована. Или еще что-нибудь. В программе используется всякая дрянь типа DeveloperExpress и FastReport, боюсь что им вызов EnumFont* необходим...
> Что надо сделать: > 1) На всякий случай, я бы собрал еще несколько дампов, > чтобы убедиться – > что падает именно здесь. Убедился - падает именно здесь на разном железе на Win2k3 Standart + TS
> 2) Далее, надо сказать разработчикам – что программа падает > при вызове EnumFontFamiliesEx. Обычно мест, где эта функция > вызывается немного, максимум два-три. Пусть самым > тщательным образом проверят все эти вызовы. Разработчики занимаются логикой :) и на винде не пишут, потому как "долго" и, сильно подозреваю, не умеют. Этот падёж приходится решать, так как народу на TS становится больше и глюк начинает проявляться чаще. Откатить версию до состояния "работает" возможности нет, т.к. код не очень managed + каждый божий день делается новая логика, в общем случае не совместимая с предыдущей
> Как это можно исправить: > a) Можно заменить EnumFontFamiliesEx на более простой > аналог EnumFontFamilies; Честно говоря, беглый просмотр исходников компонентов показал 11 мест только в исходниках компонентов, есть ещё несколько вхождений в .dcu (delphi compiled unit, получается после компиляции модулей, то из чего потом exe линкуется - бывает что компоненты распространяются не в виде исходных текстов, а в виде таких вот dcu). Поэтому, возможно, есть смысл поставить "пустышку" немного выше...
> Удачи!
|
|
|