Найти ошибочное действие в ProjectMaker в кубике С#

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Есть достаточно большой код в кубике C# (304 строчки, с кучей циклов и условий)
Иногда появляется ошибка, в какой строчке, что за ошибка понять не могу.
Предполагаю что на каком то шаге не получаю значение в переменную.
Заношу переменные вот так, без проверок на null и empty.
C#:
//проверяем еще раз список после обновления
NameLists= instance.ActiveTab.FindElementByAttribute("div", "class", "SectionSingle", "regexp", 0)
.FindChildByAttribute("select", "class", "singleSelect1", "regexp", 0).GetAttribute("innertext");
                                                
//Ищем и записываем другую переменную
Ошибка выглядит вот так
2020-10-08_15-34-29.jpg

id ошибки "e7babd7b-bd70-49b3-9887-3712fdbdf1be"
текст ошибки "Выполнение действия CSharp OwnCode: Основной. Входная строка имела неверный формат."

А какая строка, хз, и переменных разных у меня больше 20 в коде.

Ошибка появляется иногда, как в майкере так и постере.
Подскажите хоть куда копать? и как исправить?
Спасибо
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
может есть какой инструмент типа отладки, чтобы показывал на какой строчке кода выполняется действие...
 

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
954
Баллы
93
Можно прогнать по шагам, для этого поставь точку остановка и запускай (щелкни по серому полю в свойствах действия и запускай должен появиться красный кружок (не нашел скрин в PM - https://docs.microsoft.com/ru-RU/visualstudio/debugger/media/breakpointwhenchanged.png?view=vs-2019))
Можно куски обернуть в try-catch, чтобы понять, где ошибка.
Можно выводить sendInfoToLog каждые 10 строк.
 
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Можно прогнать по шагам, для этого поставь точку остановка и запускай (щелкни по серому полю в свойствах действия и запускай должен появиться красный кружок (не нашел скрин в PM - https://docs.microsoft.com/ru-RU/visualstudio/debugger/media/breakpointwhenchanged.png?view=vs-2019))
Можно куски обернуть в try-catch, чтобы понять, где ошибка.
Можно выводить sendInfoToLog каждые 10 строк.
тут блин ошибка появляется далеко не через раз, хорошо бы понимать что за ошибку искать.
Входная строка имела неверный формат - как это понимать, пустая строка или что?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113
Предполагаю что на каком то шаге не получаю значение в переменную.
Заношу переменные вот так, без проверок на null и empty.
А может имеет смысл сделать такие проверки? или добавить вывод информации в лог в разных блоках, тогда можно точнее определить место с ошибкой. Можно добавить вывод в лог название переменной и ее значение. После отладки можно отключить лишнее логгирование.
 
  • Спасибо
Реакции: arbplv

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113
может есть какой инструмент типа отладки, чтобы показывал на какой строчке кода выполняется действие...
используйте точки останова для пошаговой отладки, но в мэйкере иногда ошибки выдает, на пустом месте.
 
  • Спасибо
Реакции: arbplv

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
Входная строка имела неверный формат."
Такая ошибка часто связанна с преобразование м строки в какой то иной тип например int или bool. Скорее всего когда получаешь данные они приходят в не верном формате.

Совет: Найди все слова в коде по запросу .Parse или .TryParse и выводи в лог ту переменную которая обрабатывается этим методом. Естественно нужно выводить в лог сначала а потом выполнять эти методы.
 
  • Спасибо
Реакции: arbplv

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
  • Спасибо
Реакции: arbplv

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Спасибо. По всей видимости поймал ошибку, только как теперь ее корректно расшифровать?
2020-10-09_16-10-28.jpg
Там у меня бесконечный цикл, в нем вот еще один фор, на которой якобы произошла ошибка на 213* какой то раз, т.е. 2130 прошел нормально, а вот потом что то не понравилось?
Подскажите, как возможно это исправить, хоть в какую сторону думать?
спасибо
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 789
Благодарностей
1 954
Баллы
113
Спасибо. По всей видимости поймал ошибку, только как теперь ее корректно расшифровать?
Так указана же строка где ошибка. Проверяйте значение переменных. Скорее всего ошибка при конвертации значения переменной в int.
Используйте
int index = 0;
int.TryParse(Переменная, out index); При ошибке значение index станет опять 0.

Вместо Convert.ToInt32(Переменная); При ошибке будет исключение с остановкой по ошибке.

Ну и выводите значения переменной до и после преобразования в лог. тогда поймете в чем дело.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Так указана же строка где ошибка. Проверяйте значение переменных. Скорее всего ошибка при конвертации значения переменной в int.
Используйте
int index = 0;
int.TryParse(Переменная, out index); При ошибке значение index станет опять 0.

Вместо Convert.ToInt32(Переменная);
Я вижу, потому и странности.
Эта переменная указывается во входных настройках проекта и в течение времени не меняется никак, только читается.
Во входных настройках проекта тип этой переменной "Number".
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
На сколько правильно пишу код?
У меня один главный бот и несколько вторичных, общаются они друг с другом через глобальные переменные
Вот к примеру на одном из шагов, главный бот ждет вторичные, вторичные как доделают свои дела, запишут в переменную значение 1. Вот для этого переменные
project.GlobalVariables["ProjectSports","wait_bot_1"] это для первого
project.GlobalVariables["ProjectSports","wait_bot_2"] это для второго

В этом кусочке кода мы считаем пока не будет 2, в этом примере у нас всего 2 вторичных бота
C#:
int NumbersOfBots = 2; //задаем сколько у нас всего вторичных ботов
while(sum_wait_bots!=2) //из цикла выскакиваем когда будет готово 2 бота
    {
        sum_wait_bots = 0;
        lock(SyncObjects.ListSyncer)
            {
                for (int с = 1; с <= NumbersOfBots; с++)
                    {
                        sum_wait_bots = sum_wait_bots+ Convert.ToInt32(project.GlobalVariables["ProjectSports","wait_bot_" + с+ ""].Value);
                    }
            }
System.Threading.Thread.Sleep(1000);
    }
Как правило всегда появляются ошибки в этом for, может мне нужно написать просто сложение:
sum_wait_bots =project.GlobalVariables["ProjectSports","wait_bot_1"]+project.GlobalVariables["ProjectSports","wait_bot_2"]
Или тут все корректно и не влияет запись?
Спасибо
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
С числовой глобальной переменной можно работать как с обычным числом, а конвертировать в число или тем более в строку - не следует.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
С числовой глобальной переменной можно работать как с обычным числом, а конвертировать в число или тем более в строку - не следует.
поменял, ошибка остается
и очень странно как то...
кусок кода закомментирован...2020-10-09_20-10-53.jpg
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
поменял, ошибка остается
и очень странно как то...
кусок кода закомментирован...
Попробуйте найти файл по указанному пути и посмотреть, что там за строка.
 

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Попробуйте найти файл по указанному пути и посмотреть, что там за строка.
Вопрос решился. Спасибо!
ошибка была скорее всего в конверте пустой или нулевой переменной, Convert.Toint32 еще через раз выдавал ошибку, а вот Int32.Parse почти всегда, так и отловил. Также в логе ссылки на строки были не корректные. Для себя сделал вывод что Int32.Parse этот метод предпочтительнее тут.
У всех у кого будут похожие сложности, лучше сразу записывать в файл, т.к. оттуда проще скопировать путь + смотреть не в редакторе, а в файлике.
C#:
try
    {
            //тут проверяемый код
    }
catch(Exception e)
{
    project.Lists["название_списка"].Add(e.Message + "\r\n" + e.StackTrace);
    project.SendErrorToLog(e.Message + "\r\n" + e.StackTrace, true);
    throw;
}
 
  • Спасибо
Реакции: Alexmd

arbplv

Client
Регистрация
28.03.2020
Сообщения
373
Благодарностей
23
Баллы
18
Попробуйте найти файл по указанному пути и посмотреть, что там за строка.
Добрый. А можно каким то кодом поймать ошибку и зеннопостере?
А то у меня записывается в файлик только вот это
"
Входная строка имела неверный формат.
в System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
в ZennoLab.OwnCode.Ce7babd7bbd7049b398873712fdbdf1be.Me7babd7bbd7049b398873712fdbdf1be(IZennoPosterProjectModel project, Instance instance)

"
Спасибо
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113

Кто просматривает тему: (Всего: 5, Пользователи: 0, Гости: 5)