Что нового

Готовая программа выдаёт ошибку, как отследить?

V

VitAl2013

Гость
Скомпилировал скрипт в программу, при запуске выдаёт ошибку с сылкой на заоблочную строку (в разы превышающую то кол-во строк которое у меня было в скрипте) что делать? Как поступить? И как отловить чтоже там за ошибка то?

OffTopic:
Это к слову сказать ответ на вопрос:
"А какие вообще могут быть "хорошие" причины для декомпиляции" - http://autoit-script.ru/index.php?topic=724.msg7268#msg7268. Вот такие причины например.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
VitAl2013 сказал(а):
Скомпилировал скрипт в программу, при запуске выдаёт ошибку с сылкой на заоблочную строку (в разы превышающую то кол-во строк которое у меня было в скрипте) что делать? Как поступить? И как отловить чтоже там за ошибка то?

OffTopic:
Это к слову сказать ответ на вопрос:
"А какие вообще могут быть "хорошие" причины для декомпиляции" - http://autoit-script.ru/index.php?topic=724.msg7268#msg7268. Вот такие причины например.
VitAl2013
Это не ответ на вопрос!
Вот ответ на вопрос:
Yashied сказал(а):
Если Вы являетесь автором программы, то у Вас должен быть исходный код, если Вы его потеряли, то есть повод изучить программы для резервного копирования.

То, что вы получили ошибку после компиляции, поверьте это следствие вашего программирования.
Для того чтобы вам помогли нужно, как минимум привести исходники, вашей программы.
А то, что строка "заоблачная" и номер её сильно разнится с количеством строк программного кода, не даёт ровным счётом ни какой информации. Это может говорить только о том, что код написан неправильно.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
VitAl2013
при компиляции все инклуды засовываются в один большой скрипт, отсюда и большое кол-во строк. А по поводу декомпиляции, все средства (собсно говоря на слуху только одно такое) давно уже обмусолены. Гугл в помощь ;)
 
Автор
V

VitAl2013

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

Вопрос был: "какие ... могут быть "хорошие" причины", ответ: "отыскивание сбойного места(строки) в уже готовой моей (разработчика) скомпилировнной программе, когда на уровне скрипта ошибки не возникает". По моему это логично. Ни backup, ни отсылка в сторону нарушения закона в этом случии не прокатывают - они просто не про это случай. Где нарушение? А backup
повод изучить программы для резервного копирования
испоьлзовался и он тут ни при чём воопче.
 

Daymos

Новичок
Сообщения
8
Репутация
1
Когда у меня возник такой вопрос, пытался получить этот самый "один большой скрипт", запуская при компиляции обфускатор и выставляя в нем опции так, чтобы он ничего не делал, кроме как создавал один большой скрипт. В нем надеялся увидеть строку, указанную в сообщении об ошибке.
Также сам писал строки, приводящие к краху скрипта, чтобы легче тестилось.

Итог такой - скрипт, полученный обфускатором, все же расходится с итоговым (внутри exe-шника), видимо за счет пустых строк и т.п. мелочей. Чем дальше от начала скрипта, тем сильнее расхождение и отловить строку ~32000 уже не представляется возможным.

Буду рад, если кто-то догадается, что с этим делать дальше. Номер ошибочной строки было бы весьма приятно получить.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Непонятно. Зачем извлекать скрипт из скомпилированного файла, если он у вас уже есть? Номер строки, выдаваемый для скомпилированных скриптов не имеет никакого практического применения.
Вместо этого следовало бы привести сообщение об ошибке (где самым ценным является описание ошибки, а не номер строки).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
А разве SciTE не показывает ошибку и номер строки?
 

Daymos

Новичок
Сообщения
8
Репутация
1
Попробую изложить проблему более понятным образом.

1. Разрабатываем некую прогу для относительно большого числа пользователей, которую распространяете в скомпилированном виде.
2. Пользователь присылает скриншот с окном ошибки, где написано следующее :
Line XXXXX (например, 29786)
Array variable has incorrect number of subscripts or subscript dimension range exceeded
3. Поскольку раньше (наверное до 3.3.4.0) писалось всегда Line -1, то вопросов не возникало. На нет, как говорится, и суда нет. Однако теперь очень хочется найти, которой строке в изначальном скрипте соответствует показанный в сообщении номер. Потому что программа сложна и иначе вычислить ошибку нереально.

И все, тут и описанная топикстартером проблема.

VitAl2013, верно описал?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Daymos [?]
Потому что программа сложна и иначе вычислить ошибку нереально
Но-но. А как же поступают разработчики, использующие другие языки программирования? Ошибку выявить реально. Пользователь должен описать последовательность действий, приводящих к ошибке. А дальше уже дело техники.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Можешь сделать следующим образом. Создай в теле основного скрипта искуственную ошибку, например напиши просто слово "Abort". Затем откомпилируй программу и запусти .exe файл. Посмотри в какой строке будет ошибка, и перенеси "Abort" в другое место, в зависимости от номера строки. Через 2-3 попытки, я думаю ты определишь с точностью до 2-х строк место ошибки.
 

Daymos

Новичок
Сообщения
8
Репутация
1
SyDr сказал(а):
Daymos [?]
Потому что программа сложна и иначе вычислить ошибку нереально
Но-но. А как же поступают разработчики, использующие другие языки программирования? Ошибку выявить реально. Пользователь должен описать последовательность действий, приводящих к ошибке. А дальше уже дело техники.
При любом ЧП возникают два вопроса - "кто виноват?" и "что делать дальше?". Да, в такой ситуации виноват я сам, ибо плохой разработчик, который не учел все исключительные ситуации. Однако это все оффтоп, не так ли?
Yashied сказал(а):
Можешь сделать следующим образом. Создай в теле основного скрипта искуственную ошибку, например напиши просто слово "Abort". Затем откомпилируй программу и запусти .exe файл. Посмотри в какой строке будет ошибка, и перенеси "Abort" в другое место, в зависимости от номера строки. Через 2-3 попытки, я думаю ты определишь с точностью до 2-х строк место ошибки.
Yashied, да, такой вариант напрашивается. И судя по его наполненности действиями вручную - он как раз и предназначен для "неучтенных" случаев.

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Daymos сказал(а):
Но может быть это возможно сделать из исходного?

Здесь нет ничего сложного, нужно сделать следующее:

  • Заменить все "#include <...>" в основном скрипте и во всех включенных файлах на их содержимое (одна рекурсивная функция).
  • Объединить все разделенные с помощью "_" строки в одну.
  • Убрать все "#include-once".
  • Убрать все комментарии ("#comments-start", "cs" и ";").
  • Убрать пустые строки, двойные пробелы и пробелы в начале и в конце строки.

Теоретически должно получиться именно то, что находится в .exe файле.
 
Верх