Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Во-первых, молодец – что снял дамп. 14.07.08 22:34 Число просмотров: 1811
Автор: Neznaika <Alex> Статус: Member
|
Во-первых, молодец – что снял дамп.
Это главное.
Во-вторых, на wasm.ru – была утилита, которая перегоняет MAP в SYM:
(http://wasm.ru/toollist.php?list=20), но она тебе и не нужна.
Как правильно сказал Сергей, “map файл - это и есть символы”.
Тебе надо просто взять *.map, для которого у тебя есть дамп и найти в нем последнюю функцию, которая далее вызывает EnumFontFamiliesEx. Для того дампа, который ты выложил – вызов идет с адреса “buh+0x60cdbe”. Т.е. в файле *.map надо найти самое близкое значение, меньшее чем 60cdbe. Это и будет функция, в которой все падает.
В-третьих. Сдается мне, что здесь - даже и без *.map файла - все понятно.
Ваша программа вызывает системную функцию EnumFontFamiliesEx. Одним из параметов EnumFontFamiliesEx является callback-функция (функция обратного вызова; т.е, программист сам эту функцию не вызывает, она вызывается системой Windows). И эта callback-функция у вас написана с ошибкой. Возможно, в ней не проверяются входные параметры. Или она не обьявлена как экпортируемая. Или она обьявлена как fastcall. Или она пишет в область памяти, которая не проинициализирована. Или еще что-нибудь.
Что надо сделать:
1) На всякий случай, я бы собрал еще несколько дампов, чтобы убедиться –
что падает именно здесь.
2) Далее, надо сказать разработчикам – что программа падает при вызове EnumFontFamiliesEx. Обычно мест, где эта функция вызывается немного, максимум два-три. Пусть самым тщательным образом проверят все эти вызовы.
Как это можно исправить:
a) Можно заменить EnumFontFamiliesEx на более простой аналог EnumFontFamilies;
b) Можно попробовать заменить callback-функцию на “пустышку”, которая ничего реально не делает;
c) В крайнем случае – можно выкинуть все вызовы к EnumFontFamiliesEx, я думаю – что в бухгалтерской программе без этой функции вполне можно обойтись.
Удачи!
|
|
|