169 похожих чатов

Подскажите, а как можно отследить зацикливания в программе? Есть древний (на

stack LTS-8.5) проект, он использует Servant. Пытаюсь обновить до 17.9, уже почти удалось, но вот возникла проблема, посылаю POST-запрос, программа начинает потихоньку выжирать всю память и падает.

Запрос:
curl 'http://localhost:3003/api/private/itinerary/77' -H 'Content-Type: application/json' --data-raw '{"plan_id":270031,"country":"belize"}' --verbose

Насколько я понимаю, должно прийти в этот Endpoint:

type UpdateById = Capture "id" ItineraryId :> PostWithValidation Itinerary Itinerary

updateById :: AppSessionServer UpdateById
updateById id Itinerary{..} = do
liftIO $ putStrLn ("~~~~~~~ updateById ~~~~~~~~~~~~~~~" :: P.String)
runExceptT $ doDb $ do
suid <- requireLoggedInUser
requireAuth (hasCountryRole Reservations itineraryCountry)
pgUpdate id [ ItineraryTrip_name =. itineraryTrip_name
, ItineraryLast_user_id =. Just suid
]
newRec <- pgGet404 id
pure newRec

Но вот до putStrLn дело вообще не доходит.

Если послать кривой запрос, напр., --data-raw '{"plan_id":270031}' (`country обязательно поле) то сервер отвечает ошибкой. Если запустить stack ghci и там сделать JSON.decode "{\"plan_id\":270031,\"country\":\"belize\"} :: Itinerary -- то распарсивает. Поэтому я делаю вывод, что хотя бы парсинг работает корректно.

Но что тогда зависает и выжирает всю память? Как это можно найти? Можно ли как-то получить стектрейсы всех потоков, например? Это бы облегчило дело.

Какая вообще тактика поиска зависаний Servant?

2 ответов

7 просмотров

стэктрэйсы включаются ключом RTS -xc в режиме профилирования

toroboque- Автор вопроса
Cheese Syrowiecki
стэктрэйсы включаются ключом RTS -xc в режиме проф...

Да, при падении всё-таки вывелся стек-трейс. Спасибо! Попробую с этим разобраться...

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта