Практические подсказки, отлаживая глубокую рекурсию?

Вы не можете использовать фабрики DSL (Jms) подобным образом, они предназначены для использования в потоке DSL

@Bean
IntegrationFLow flow()
    return IntegrationFlows.from(jmsInboundGateway())
            .handle("service", "process")
            .get();

Обработка DSL выполняет всю проводку.

Он работает без канала, потому что компонент без выходного канала направляет ответ на заголовок replyChannel.

Если вы не хотите использовать DSL, вы должны подключить входящий шлюз напрямую как компонент, а не использовать фабрику Jms.

10
задан JulianR 11 May 2009 в 18:30
поделиться

8 ответов

Ведение журнала. Подробно войдите в свой код. По моему опыту, ведение журнала - это решение этих проблем. когда сложно понять, что делает ваш код, подробное ведение журнала - очень хорошее решение, так как оно позволяет вывести из вашего кода внутреннее состояние; это действительно не идеальное решение, но, насколько я видел, оно работает лучше, чем любой другой метод.

24
ответ дан 3 December 2019 в 13:51
поделиться

Возможно, вы могли бы преобразовать рекурсию в итерацию с явным стеком для параметров. Таким образом, тестирование упрощается, поскольку вы можете напрямую регистрировать значения, получать доступ к стеку и вам не нужно передавать данные / переменные при каждой самооценке или предотвращать их выпадение из области видимости.

6
ответ дан 3 December 2019 в 13:51
поделиться

Раньше я отформатировал журналы так, чтобы они отражали глубину рекурсии. Таким образом, вы можете сделать новый отступ для каждой рекурсии или какой-либо другой разделитель. Затем создайте отладочную dll, которая регистрирует все, что вам нужно знать о каждой итерации. Между ними вы сможете прочитать путь выполнения и, надеюсь, сказать, что не так.

4
ответ дан 3 December 2019 в 13:51
поделиться

Я обычно тестирую такие алгоритмы с помощью одного или нескольких предопределенных наборов данных, которые имеют четко определенные результаты. Обычно я провожу несколько таких тестов в порядке возрастания сложности.

Если вы настаиваете на отладке, иногда полезно дополнить код операторами, которые проверяют заданное значение, чтобы вы могли прикрепить точку останова в это время и в определенном месте. в коде:

  if ( depth = X && item.id = 32) {
     // Breakpoint here
  }
3
ответ дан 3 December 2019 в 13:51
поделиться

Однажды у меня была похожая проблема, когда я разрабатывал алгоритм ИИ для игры в тетрис. После многих проб, потраченных на чтение моих собственных журналов, отладку, вход и выход из функций, я решил написать быстрый визуализатор и протестировать свой код с ФИКСИРОВАННЫМ вводом.

Итак, если время не проблема, и вы действительно хотите понять, что происходит, получить фиксированное состояние платы и ВИДЕТЬ, что ваша программа делает с данными, используя сочетание журналов отладки / вывода и каких-то ваших собственных инструментов, которые показывают информацию по каждому step.

Как только вы найдете состояние платы, которое вызывает эту проблему, попробуйте точно определить функции, где она начинается, и тогда вы сможете исправить это.

2
ответ дан 3 December 2019 в 13:51
поделиться

Я знаю, какая это может быть боль. На моей работе мы в настоящее время работаем со сторонним приложением, которое в основном ведет себя как черный ящик, поэтому нам нужно разработать некоторые интересные методы отладки, которые помогут нам обойти проблемы.

Когда я проходил курс теории компилятора в колледже , мы использовали программную библиотеку для визуализации наших деревьев; это также может помочь вам, так как может помочь вам увидеть, как выглядит дерево. Фактически, вы могли бы самостоятельно создать приложение WinForms / WPF, чтобы выгружать содержимое вашего дерева в элемент управления TreeView - это беспорядочно, но оно выполнит свою работу.

Возможно, вы захотите рассмотреть какой-нибудь вывод отладки , слишком. Я знаю, что вы упомянули, что ваше дерево большое, но, возможно, операторы отладки или разрывы в ключевой точке во время выполнения, которую вы не можете визуализировать, помогут вам.

Имейте также в виду, что Эта интеллектуальная отладка с помощью Visual Studio может творить чудеса. Трудно увидеть, как состояние меняется при нескольких перерывах, но на самом деле Visual Studio 2010 должна помочь с этим.

К сожалению, не очень легко помочь вам отладить без дополнительной информации. Вы определили первую глубину, на которой он начинает ломаться? Продолжает ли он ломаться с более высокой глубиной поиска? Вы можете оценить свои рабочие случаи и попытаться определить, чем они отличаются.

Вы определили первую глубину, на которой он начинает ломаться? Продолжает ли он ломаться с более высокой глубиной поиска? Вы можете оценить свои рабочие случаи и попытаться определить, чем они отличаются.

Вы определили первую глубину, на которой он начинает ломаться? Продолжает ли он ломаться с более высокой глубиной поиска? Вы можете оценить свои рабочие случаи и попытаться определить, чем они отличаются.

1
ответ дан 3 December 2019 в 13:51
поделиться

Поскольку вы говорите, что обход работает не так, как ожидалось, я предполагаю, что вы имеете некоторое представление о том, где что-то может пойти не так. Затем проверьте код, чтобы убедиться, что вы не пропустили ничего базового.

После этого я предлагаю вам настроить несколько простых модульных тестов. Если они пройдут, продолжайте добавлять тесты, пока они не потерпят неудачу. Если они потерпят неудачу, сократите количество тестов, пока они не пройдут успешно или не станут максимально простыми. Это должно помочь вам точно определить проблемы.

Если вы также хотите отлаживать, я предлагаю вам использовать условные точки останова. Visual Studio позволяет изменять точки останова, поэтому вы можете установить условия, при которых точка останова должна срабатывать. Это может уменьшить количество итераций, на которые вам нужно обратить внимание.

0
ответ дан 3 December 2019 в 13:51
поделиться

Я бы начал с инструментария функции (ей). При каждом рекурсивном вызове регистрируются структуры данных и любая другая информация, которая может помочь вам определить проблему.

Распечатайте дамп вместе с исходным кодом, затем отойдите от компьютера и проведите приятный сеанс отладки на бумаге за чашкой кофе.

0
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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