Regular Expression Search and Replace (RESearch)
Re: Regular Expression Search and Replace (RESearch)
Latest post of the previous page:
Cavaler, что-нибудь по поводу ранее обсуждавшихся нативного LUA и обратного поиска слышно?Re: Regular Expression Search and Replace (RESearch)
Да, проблема с Grep починилась.Cavaler wrote:RESearch821.rar
Однако, похоже, наткнулся на общую проблему RESearch в целом...
Что я делал: запускал Grep и Search в корневой папке проекта, в которой содержатся как исходники, так и скомпилированные файлы. В частности, там есть файл *.ipch размером 32 МБ. И как только RESearch дошёл до этого файла, он выделил порядка 600 МБ памяти и выдал:
Как это воспроизвести:
1. Идём в папку "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" или аналогичную, в которой есть бинарный файл размером более 30 МБ
2. Запускаем Search или Grep с регулярными выражениями - и получаем окошечко выше.
Re: Regular Expression Search and Replace (RESearch)
при [x] Use real end-of-line sequences
замена CR на пусто
приводит к ошибке
а так хороший плугин, спасибо за труды.
замена CR на пусто
приводит к ошибке
а так хороший плугин, спасибо за труды.
Re: Regular Expression Search and Replace (RESearch)
difr wrote:при [x] Use real end-of-line sequences
замена CR на пусто
приводит к ошибке
а так хороший плугин, спасибо за труды.
Code: Select all
Known bugs:
- Replace changing part of (real) EOL crashes
Re: Regular Expression Search and Replace (RESearch)
Ну вообще на больших файлах он хавает память как может, засасывая файл целиком и перекодируя весь. Но падать конечно не должен.DV wrote:Да, проблема с Grep починилась.Cavaler wrote:RESearch821.rar
Однако, похоже, наткнулся на общую проблему RESearch в целом...
Что я делал: запускал Grep и Search в корневой папке проекта, в которой содержатся как исходники, так и скомпилированные файлы. В частности, там есть файл *.ipch размером 32 МБ. И как только RESearch дошёл до этого файла, он выделил порядка 600 МБ памяти и выдал:
Как это воспроизвести:
1. Идём в папку "C:\Program Files\Microsoft Visual Studio 10.0\VC\lib" или аналогичную, в которой есть бинарный файл размером более 30 МБ
2. Запускаем Search или Grep с регулярными выражениями - и получаем окошечко выше.
Пока не смог повторить, пару файлов в 120Mb обработал, равно как и каталог с либами...
Моржет ты сольешь http://www.kostrom.spb.ru/FILES/RESearchPDB.rar да прицепишься отладчиком?
Re: Regular Expression Search and Replace (RESearch)
Cavaler wrote:RESearchPDB.rar
Т.е. пытается выделить 400 с чем-то МБ и бросает std::bad_alloc.
Без исходников непонятно, каким образом SetString с длиной 17 728 914 приводит к запросу размера 423 540 084 у вектора.
Возможно, имеет смысл ввести в RESearch ограничение на максимальную длину обрабатываемой строки?
Re: Regular Expression Search and Replace (RESearch)
Это мы уже проезжали, и тогда хором пришли к тому, что лучше без ограничений - лучше пусть падает, чем обработает файл не так, как ожидается. К тому же в зависимости от обработки он кушать может по разному, так что ограничение само по себе не панацея. Но вполне возможно, что опция - "разбивать длинные строки на подстроки по исчерпанию памяти" и не помешала бы.DV wrote:Возможно, имеет смысл ввести в RESearch ограничение на максимальную длину обрабатываемой строки?
- HaRT
- Moderator
- Posts: 10866
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Regular Expression Search and Replace (RESearch)
Ну-ка, ну-ка, это кто и где хором предпочёл падение (crash)? Насколько я помню, речь шла о завершении текущей операции неуспехом (fail). Это совсем не то же самое.AleXH wrote:хором пришли к тому, что лучше без ограничений - лучше пусть падает, чем обработает файл не так, как ожидается
Фар есть инструмент, а не нянька. © 2009 DrKnS
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Re: Regular Expression Search and Replace (RESearch)
А зачем это плагин кидает наружу свои C++ exceptions?Code: Select all
╔════ Exception occurred ════ ║ string too long ╟──────────────────────────── ║ { Terminate Far } [ Debug ]
Re: Regular Expression Search and Replace (RESearch)
Мне в этом плане нравится подход плагина arclite: если в ходе работе произошли какие-то ошибки, то в конце операции (в конце поиска в случае RESearch) вывести список файлов, которые были обработаны некорректно.HaRT wrote:Насколько я помню, речь шла о завершении текущей операции неуспехом (fail).
Re: Regular Expression Search and Replace (RESearch)
Как приводит к такому запросу. CUTF8Traverse это хелпер, сопоставляющий смещения в исходной строке и в UTF-8, и обратно. Соответственно каждый символ исходной строки может быть максимум 4 символа utf-8б по 4 байта на элемент, итого - 280Mb, почему пытается хавать еще в 2 раза больше я как-то пока не понял.DV wrote:Без исходников непонятно, каким образом SetString с длиной 17 728 914 приводит к запросу размера 423 540 084 у вектора.
Возможно, имеет смысл ввести в RESearch ограничение на максимальную длину обрабатываемой строки?
UPD: Кстати да, баг, я же уже знаю в этом месте длину utf-8 строки, можно сильно меньше памяти хавать.
Re: Regular Expression Search and Replace (RESearch)
А вообще с учетом того, что с какого-то момента в PCRE появилась работа с UTF-16, надо все на нее переводить, гораздо меньше хлопот...Cavaler wrote:Как приводит к такому запросу. CUTF8Traverse это хелпер, сопоставляющий смещения в исходной строке и в UTF-8, и обратно. Соответственно каждый символ исходной строки может быть максимум 4 символа utf-8б по 4 байта на элемент, итого - 280Mb, почему пытается хавать еще в 2 раза больше я как-то пока не понял.DV wrote:Без исходников непонятно, каким образом SetString с длиной 17 728 914 приводит к запросу размера 423 540 084 у вектора.
Возможно, имеет смысл ввести в RESearch ограничение на максимальную длину обрабатываемой строки?
UPD: Кстати да, баг, я же уже знаю в этом месте длину utf-8 строки, можно сильно меньше памяти хавать.
- HaRT
- Moderator
- Posts: 10866
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Regular Expression Search and Replace (RESearch)
Почему меньше? Она ведь тоже переменной длины. Это ведь не UCS-2.Cavaler wrote:А вообще с учетом того, что с какого-то момента в PCRE появилась работа с UTF-16, надо все на нее переводить, гораздо меньше хлопот...
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Regular Expression Search and Replace (RESearch)
Честно говоря, я забиваю толстый болт на то, что это не одно и то же. Вероятность встретить коды > 0xFFFF в реальности стремится к нулю. Я не думаю, что и сам Far2/3 их корректно переварит.HaRT wrote:Почему меньше? Она ведь тоже переменной длины. Это ведь не UCS-2.Cavaler wrote:А вообще с учетом того, что с какого-то момента в PCRE появилась работа с UTF-16, надо все на нее переводить, гораздо меньше хлопот...
Re: Regular Expression Search and Replace (RESearch)
Если вдруг кому-то зачем-то любопытно, опишу, как же сейчас в RESearch устроена работа с файлами - заодно у себя в голове причешу.
Короче весело. Зато, если все правильно написано, должно более-менее быстро работать.
Короче весело. Зато, если все правильно написано, должно более-менее быстро работать.