на фоне последних падений colorer и некоторой беспомощностью при анализе проблем, начал вспоминать про встроенные средства far. Ранее использовали map файлы и можно было понять где ошибка. сейчас же они не используются, или я для плагина не праивльно готовлю?
берем обычную сборку , подкладываем библиотеку с ошибкой. получаем такое окно.
не особо информативно.
смотрим стек
ссылка на одну и ту же функцию, и по сути неверное место ошибки. для Far вообще ничего не показывает, требует pdb.
хотя рядом с far лежит его же map, с colorer так же лежит map файл. но они не обрабатываются ?
подкладываем pdb от far, и от colorer
для фара - огонь, все есть. для colorer нет ничего.
и если я собираю colorer с debug в release инфа появляется.
как итог
1. map файлы еще нужны? может уже и поставлять их не надо
2. как сделать, чтобы фар и для плагинов подключал pdb ?
map файлы
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
map файлы
*.map для fexcept, а fexcept только для x86. Средства на скриншотах map не обрабатывают. Я когда-то пытался сделать, но оно муторно, сложно и неточно, поэтому нет.
Спасибо.для фара - огонь
Типичному пользователю - скорее нет, чем да. Может и не надо.1. map файлы еще нужны? может уже и поставлять их не надо
Far передает в SymInitialize %FARHOME%, попробуйте класть прямо туда.2. как сделать, чтобы фар и для плагинов подключал pdb ?
map файлы
если подложить colorer.pdb в корень far, то информация в окне появляется. Но не корректная по номерам строк.
я пока не нашел способ проверить , но я так подозреваю, что в официальной сборке far содержит дебаг информацию. из скриптов сборки
и NO_RELEASE_PDB нигде в ночных скриптах не задаются.
сам far с отладочной информацией, плюс отдельно поставляется pdb.
т.е. если указываешь /debug для линкера то бинарник растет и рядом появляется pdb. без него pdb нет, и бинарник меньше.
применяю эту логику для плагина. получаем плагин и pdb.
если кладу такой плагин, без pdb, то вижу все строки . точная информация, все отлично. при добавлении pdb ничего нового не появляется.
пробую собрать плагин без /debug, подкладываю его. информации по ошибке нет. подкладывание pdb от предыдущей сборки - строки появляются, но не верные адреса, как и в начале данного сообщения.
из чего я делаю вывод (наверняка ошибочный), что far`у для отображения информации по себе не нужен pdb. он и так все покажет. или при сборке (не нашел) отдельным шагом exe зачищается от отладочной информации? для остальных надо не pdb использовать , а релиз сборку с отладочной нформацией
я пока не нашел способ проверить , но я так подозреваю, что в официальной сборке far содержит дебаг информацию. из скриптов сборки
Code: Select all
!ifndef NO_RELEASE_PDB
CPPFLAGS=$(CPPFLAGS) /Zi
LINKFLAGS=$(LINKFLAGS) /debug
!endif
сам 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.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
map файлы
Утверждается, что pdb ищутся рекурсивно, т.е. если всё сделать правильно, то в plugins\farcolorer тоже должно найти.
В оцициальной сборке дебаг информацию содержит far.pdb.в официальной сборке far содержит дебаг информацию
Чтобы не рос - указывайте ещё и /incremental:no /OPT:REF /OPT:ICFесли указываешь /debug для линкера то бинарник растет и рядом появляется pdb
exe/dll содержит полный путь к pdb. Если вы собираете самостоятельно, а потом куда-то копируете exe/dll без pdb, то pdb найдется по оригинальному пути.если кладу такой плагин, без pdb, то вижу все строки
Нет.или при сборке (не нашел) отдельным шагом exe зачищается от отладочной информации?
Ошибочный, да. Вы же сами выше пишете:из чего я делаю вывод (наверняка ошибочный), что far`у для отображения информации по себе не нужен pdb. он и так все покажет.
Надо использовать релиз сборку с отладочной нформацией и ключами выше. В этом случае получится компактный бинарник без символов и отдельный pdb с символами.для остальных надо не pdb использовать , а релиз сборку с отладочной нформацией
map файлы
утверждение выше, что pdb не нужен - конечно не верное. внутри dll был путь до pdb в папке сборки, и он всегда там его находил.
дополнительные ключи сборки помогли , плагин не изменился существенно по размеру и pdb собрался.
чтобы подхватился pdb нужно положить его в корень . рекурсивный поиск не работает. тут вот это подтверждают.
так же можно победить , если в UserSearchPath передать пути до папок с плагинами через точку с запятой. far ведь знает всех, кого загрузил. если указать (попробовал добавить в far явно еще одну папку для поиска), то работает
дополнительные ключи сборки помогли , плагин не изменился существенно по размеру и pdb собрался.
чтобы подхватился pdb нужно положить его в корень . рекурсивный поиск не работает. тут вот это подтверждают.
так же можно победить , если в UserSearchPath передать пути до папок с плагинами через точку с запятой. far ведь знает всех, кого загрузил. если указать (попробовал добавить в far явно еще одну папку для поиска), то работает
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
map файлы
Я немного поигрался с этими вашими мапами. Начиная с 5627 Far будет показывать в стеке не реальные адреса, рандомно приправленные ASLR, а стабильные RVA, по которым можно что-то понять. Там лежит демо-скрипт, делающий из map и списка RVA красивый список имен функций.DrKnS wrote: ↑Wed 15 Apr, 2020 20:58*.map для fexcept, а fexcept только для x86. Средства на скриншотах map не обрабатывают. Я когда-то пытался сделать, но оно муторно, сложно и неточно, поэтому нет.
fexcept для x64 сделать тоже реально, но там в целом всё очень печально, проще закопать.