map файлы

Разработка Far.
Post Reply
User avatar
ctapmex
Posts: 1077
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 22 times
Contact:

map файлы

Post by ctapmex »

на фоне последних падений colorer и некоторой беспомощностью при анализе проблем, начал вспоминать про встроенные средства far. Ранее использовали map файлы и можно было понять где ошибка. сейчас же они не используются, или я для плагина не праивльно готовлю?
берем обычную сборку , подкладываем библиотеку с ошибкой. получаем такое окно.
exp2.PNG
не особо информативно.
смотрим стек
exp2.PNG
ссылка на одну и ту же функцию, и по сути неверное место ошибки. для Far вообще ничего не показывает, требует pdb.

хотя рядом с far лежит его же map, с colorer так же лежит map файл. но они не обрабатываются ?
подкладываем pdb от far, и от colorer
exp3.PNG
для фара - огонь, все есть. для colorer нет ничего.
и если я собираю colorer с debug в release инфа появляется.

как итог
1. map файлы еще нужны? может уже и поставлять их не надо
2. как сделать, чтобы фар и для плагинов подключал pdb ?
Attachments
exp1.PNG

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

map файлы

Post by DrKnS »

ctapmex wrote:
Wed 15 Apr, 2020 19:08
сейчас же они не используются, или я для плагина не праивльно готовлю?
*.map для fexcept, а fexcept только для x86. Средства на скриншотах map не обрабатывают. Я когда-то пытался сделать, но оно муторно, сложно и неточно, поэтому нет.
для фара - огонь
Спасибо.
1. map файлы еще нужны? может уже и поставлять их не надо
Типичному пользователю - скорее нет, чем да. Может и не надо.
2. как сделать, чтобы фар и для плагинов подключал pdb ?
Far передает в SymInitialize %FARHOME%, попробуйте класть прямо туда.

User avatar
ctapmex
Posts: 1077
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 22 times
Contact:

map файлы

Post by ctapmex »

если подложить colorer.pdb в корень far, то информация в окне появляется. Но не корректная по номерам строк.

я пока не нашел способ проверить , но я так подозреваю, что в официальной сборке far содержит дебаг информацию. из скриптов сборки

Code: Select all

!ifndef NO_RELEASE_PDB
CPPFLAGS=$(CPPFLAGS) /Zi
LINKFLAGS=$(LINKFLAGS) /debug
!endif
и NO_RELEASE_PDB нигде в ночных скриптах не задаются.
сам far с отладочной информацией, плюс отдельно поставляется pdb.

т.е. если указываешь /debug для линкера то бинарник растет и рядом появляется pdb. без него pdb нет, и бинарник меньше.
применяю эту логику для плагина. получаем плагин и pdb.
если кладу такой плагин, без pdb, то вижу все строки . точная информация, все отлично. при добавлении pdb ничего нового не появляется.
пробую собрать плагин без /debug, подкладываю его. информации по ошибке нет. подкладывание pdb от предыдущей сборки - строки появляются, но не верные адреса, как и в начале данного сообщения.

из чего я делаю вывод (наверняка ошибочный), что far`у для отображения информации по себе не нужен pdb. он и так все покажет. или при сборке (не нашел) отдельным шагом exe зачищается от отладочной информации? для остальных надо не pdb использовать , а релиз сборку с отладочной нформацией
Last edited by ctapmex on Thu 16 Apr, 2020 12:58, edited 1 time in total.

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

map файлы

Post by DrKnS »

ctapmex wrote:
Thu 16 Apr, 2020 12:57
если подложить colorer.pdb в корень far, то информация в окне появляется
Утверждается, что pdb ищутся рекурсивно, т.е. если всё сделать правильно, то в plugins\farcolorer тоже должно найти.
в официальной сборке far содержит дебаг информацию
В оцициальной сборке дебаг информацию содержит far.pdb.
если указываешь /debug для линкера то бинарник растет и рядом появляется pdb
Чтобы не рос - указывайте ещё и /incremental:no /OPT:REF /OPT:ICF
если кладу такой плагин, без pdb, то вижу все строки
exe/dll содержит полный путь к pdb. Если вы собираете самостоятельно, а потом куда-то копируете exe/dll без pdb, то pdb найдется по оригинальному пути.
или при сборке (не нашел) отдельным шагом exe зачищается от отладочной информации?
Нет.
из чего я делаю вывод (наверняка ошибочный), что far`у для отображения информации по себе не нужен pdb. он и так все покажет.
Ошибочный, да. Вы же сами выше пишете:
ctapmex wrote:
Wed 15 Apr, 2020 19:08
для Far вообще ничего не показывает, требует pdb
для остальных надо не pdb использовать , а релиз сборку с отладочной нформацией
Надо использовать релиз сборку с отладочной нформацией и ключами выше. В этом случае получится компактный бинарник без символов и отдельный pdb с символами.

User avatar
ctapmex
Posts: 1077
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 22 times
Contact:

map файлы

Post by ctapmex »

утверждение выше, что pdb не нужен - конечно не верное. внутри dll был путь до pdb в папке сборки, и он всегда там его находил.
дополнительные ключи сборки помогли , плагин не изменился существенно по размеру и pdb собрался.
чтобы подхватился pdb нужно положить его в корень . рекурсивный поиск не работает. тут вот это подтверждают.
так же можно победить , если в UserSearchPath передать пути до папок с плагинами через точку с запятой. far ведь знает всех, кого загрузил. если указать (попробовал добавить в far явно еще одну папку для поиска), то работает

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

map файлы

Post by DrKnS »

ctapmex wrote:
Thu 16 Apr, 2020 17:11
так же можно победить , если в UserSearchPath передать пути до папок с плагинами через точку с запятой. far ведь знает всех, кого загрузил.
Пожалуй, в большинстве случаев будет достаточно одного пути - к тому плагину, который упал. 5588.

User avatar
ctapmex
Posts: 1077
Joined: Fri 11 Apr, 2008 07:53
Been thanked: 22 times
Contact:

map файлы

Post by ctapmex »

спасибо. проверил, работает

User avatar
DrKnS
Posts: 5646
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 307 times

map файлы

Post by DrKnS »

DrKnS wrote:
Wed 15 Apr, 2020 20:58
ctapmex wrote:
Wed 15 Apr, 2020 19:08
сейчас же они не используются, или я для плагина не праивльно готовлю?
*.map для fexcept, а fexcept только для x86. Средства на скриншотах map не обрабатывают. Я когда-то пытался сделать, но оно муторно, сложно и неточно, поэтому нет.
Я немного поигрался с этими вашими мапами. Начиная с 5627 Far будет показывать в стеке не реальные адреса, рандомно приправленные ASLR, а стабильные RVA, по которым можно что-то понять. Там лежит демо-скрипт, делающий из map и списка RVA красивый список имен функций.

fexcept для x64 сделать тоже реально, но там в целом всё очень печально, проще закопать.

Post Reply

Return to “Development”