Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа на стороннем компьютере выдает ошибку 
V
    Опции темы
okaton
Дата 19.10.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Доброго времени суток.
У меня возникла проблема (большая). Я собрал программу, на моей машине работает прекрасно.
А вот на других (framework 2 установлен) не работает. И выдает (The END - название формы):

user posted image

где Details это:
Цитата

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box. 

************** Exception Text ************** 
System.IndexOutOfRangeException: Index was outside the bounds of the array. 
at TH.Form23.RW_Data_in_Mass() 
at TH.Form23.Rabota() 
at TH.Form22.Proverka() 
at TH.Form22.ST9() 
at TH.Form22.button1_Click(Object sender, EventArgs e) 
at System.Windows.Forms.Control.OnClick(EventArgs e) 
at System.Windows.Forms.Button.OnClick(EventArgs e) 
at System.Windows.Forms.Button.PerformClick() 
at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) 
at System.Windows.Forms.Control.ProcessDialogKey(Keys keyData) 
at System.Windows.Forms.Control.PreProcessMessage(Message& msg) 
at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) 
at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 


************** Loaded Assemblies ************** 
mscorlib 
Assembly Version: 2.0.0.0 
Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll 
---------------------------------------- 
T-AMTH 
Assembly Version: 1.0.0.0 
Win32 Version: 1.0.0.0 
CodeBase: file:///C:/or/TH.exe 
---------------------------------------- 
System.Windows.Forms 
Assembly Version: 2.0.0.0 
Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 
---------------------------------------- 
System 
Assembly Version: 2.0.0.0 
Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 
---------------------------------------- 
System.Drawing 
Assembly Version: 2.0.0.0 
Win32 Version: 2.0.50727.42 (RTM.050727-4200) 
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 
---------------------------------------- 

************** JIT Debugging ************** 
To enable just-in-time (JIT) debugging, the .config file for this 
application or computer (machine.config) must have the 
jitDebugging value set in the system.windows.forms section. 
The application must also be compiled with debugging 
enabled. 

For example: 

<configuration> 
<system.windows.forms jitDebugging="true" /> 
</configuration> 

When JIT debugging is enabled, any unhandled exception 
will be sent to the JIT debugger registered on the computer 
rather than be handled by this dialog box.

Что это я не "очень" понимаю (если честно вобще не понимаю)  smile 
Помогите мне разобраться пожалуйсто, а то я уже с ума схожу smile 

Это сообщение отредактировал(а) okaton - 19.10.2007, 16:56
PM MAIL   Вверх
Experimenter
Дата 19.10.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



Привет!
Во-первых, делаешь ли ты обертки try-catch в своем коде?
Если сделаешь, то можно легко локализовать тот участок, где вызывается данное исключение.
Из данного сообщения можно лишь понять, что где-то ты выходишь за рамки заданного тобой массива.
Конкретнее сказать невозможно.


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
okaton
Дата 19.10.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Experimenter, Привет! 

try-catch не использовал. 

А почему я не выхожу за границы массива, на машине где установлен c#?

Добавлено через 8 минут и 8 секунд
А как работать с try-catch (если не сложно)?
PM MAIL   Вверх
archeg
Дата 19.10.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 4
Всего: 27



Цитата(okaton @  19.10.2007,  17:45 Найти цитируемый пост)
А почему я не выхожу за границы массива, на машине где установлен c#?

Ну значит на разных машинах твоя программа ведет себя по-разному


Цитата(okaton @  19.10.2007,  17:45 Найти цитируемый пост)
А как работать с try-catch (если не сложно)? 

Код

try
{
//Код провеяемый на ошибку
}
catch (IndexOutOfRangeException ex)
{
  //  Отлов ошибки
}
finally
{
 //Исполняется всегда
}

А вообще-то уверен что где-то на форуме было. А еще лучше какую-то книгу прочитать - там найдешь намного больше  smile 

Это сообщение отредактировал(а) archeg - 19.10.2007, 18:21


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Experimenter
Дата 19.10.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



Код

try
{
   //твой код
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
}

Увидишь даже номер строки, где ошибка произошла (если она произошла).

З.Ы. Если только по массиву отследить нужно, то тогда конечно catch (IndexOutOfRangeException ex) 

Это сообщение отредактировал(а) Experimenter - 19.10.2007, 18:39


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
okaton
Дата 19.10.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



archeg, Спасибо.

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

Смогу ли я с помощью try-catch отловить на своей машине ошибку, если она там не возникает или (try-catch) будет как-то особенно работать на других машинах?

А что здесь писать?
Код

catch (IndexOutOfRangeException ex)
{
  //  Отлов ошибки
}


Добавлено через 2 минуты и 4 секунды
Experimenter, Спасибо.

Последний вопрос снимаю
PM MAIL   Вверх
Experimenter
Дата 19.10.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



okaton, есть такое предположение, что на твоей машине программа тоже может выдать ошибку, но ты работаешь с программой как ее создатель, а юзер - как юзер. Он может совершить ряд нелогичных действий (с твоей точки зрения и с точки зрения CLR), которые ты бы не стал совершать, потому что он понятия не имеет, как твоя программа устроена. Для этого и существует тестирование.

Добавлено через 5 минут и 49 секунд
В любом случае возьми за правило оборачивать код в отлов исключений, и твоя работа в части технической поддержки твоих приложений будет существенно облегчена. А то и вообще отпадет за ненадобностью.


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
okaton
Дата 19.10.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Experimenter, дело в том что я совершаю абсолютно одинаковые действия на двух машинах (вот что странно), 
а эффект различный :(

Код

System.IndexOutOfRangeException: Index was outside the bounds of the array. 
at TH.Form23.RW_Data_in_Mass() 
at TH.Form23.Rabota() 
...

На этом этапе(TH.Form23.RW_Data_in_Mass() (предфинальном))  программа работает без участия пользователя, она записывает в массивы данные (в том числе из файлов)
а здесь (TH.Form23.Rabota()) она обрабатывает полученные по ходу данные + (отсюда TH.Form23.RW_Data_in_Mass() )

Но допустив что я что-то упустил (я уже склоняюсь к тому что так оно и есть) я не могу понять вот это
Цитата

...
at 
at TH.Form22.ST9() 
at TH.Form22.button1_Click(Object sender, EventArgs e) 
 

Единственное что отсюда TH.Form22.Proverka() и отсюда стартует функция в которой содержиться TH.Form23.RW_Data_in_Mass() и т.д.

А вот это вообще загадка
Цитата

at System.Windows.Forms.Control.OnClick(EventArgs e) 
at System.Windows.Forms.Button.OnClick(EventArgs e) 
at System.Windows.Forms.Button.PerformClick() 
at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) 
at System.Windows.Forms.Control.ProcessDialogKey(Keys keyData) 
at System.Windows.Forms.Control.PreProcessMessage(Message& msg) 
at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) 
at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 



Сейчас попробую try-catch, поглядим что скажет  smile
PM MAIL   Вверх
archeg
Дата 19.10.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 4
Всего: 27



Цитата(okaton @  19.10.2007,  19:20 Найти цитируемый пост)
Experimenter, дело в том что я совершаю абсолютно одинаковые действия на двух машинах (вот что странно), 
а эффект различный :(

Ну дай код - посмотрим )


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
Experimenter
Дата 19.10.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



Действительно, тащи код, вот эту самую процедуру TH.Form23.RW_Data_in_Mass() и все, что ты ей на вход даешь...


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
okaton
Дата 19.10.2007, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Код

// Вызывается здесь TH.Form22.Proverka() {Rabota();}

// Это уже на другой форме ("The END")
public void Rabota()
        {            
            ...
            RW_Data_in_Mass();
            ...
            this.Close();
        }


public void RW_Data_in_Mass()
        {                       
                
                for (int n = 0; n < 4; n++)
                {
                    int nn = n + 1;
                    FileStream fs = new FileStream("T_ASA" + nn + ".1", FileMode.OpenOrCreate);
                    int b = fs.ReadByte();
                    string text = "";
                    while (b > 0)
                    {
                        text += char.ConvertFromUtf32(b);
                        b = fs.ReadByte();
                    }                    
                    char[] seps = { ' ', '\r', '\n' };                    
                    string[] strs = text.Split(seps, StringSplitOptions.RemoveEmptyEntries);
                    int[] output = new int[strs.Length];
                    int i = 0;
                    for (int m = 0; m < 9; m++) 
                    {
                        for (int e = 0; e < 20; e++) 
                        {
                            Ins_Tab.I_Tab[n][m, e] = int.Parse(strs[i]);
                            i++;
                        }
                    }
                }
            }
            
                using (BinaryReader br = new BinaryReader(File.OpenRead("T_ASA.2")))
                {

                    for (Int32 i = 0; br.BaseStream.Position < br.BaseStream.Length; i++)
                    {
                        for (int n = 0; n < 9; n++) 
                        {
                            for (int m = 0; m < 21; m++) 
                            {
                                for (int e = 0; e < 11; e++) 
                                {
                                    Ins_Tab2.I_Tab2[n][m, e] = br.ReadSingle();
                                }
                            }
                        }
                    }
                }                
// Дальше все однотипное


У меня складывается такое впечатление что программа не может получить доступ к файлу (T_ASA1.1 это первый файл к которому она обращается, распологается в корневой директории моей программы (на моей машине пробовал тот же вариант(в смысле там же расположил - работает)))
Что интересно после возникновении ошибки на рабочем столе возникает T_ASA1.1 размером 0кb

Это сообщение отредактировал(а) okaton - 19.10.2007, 20:26
PM MAIL   Вверх
okaton
Дата 19.10.2007, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



smile  Ну все можно вешаться или застрелиться (жаль нет подходящего смайла).
Я поставил в RW_Data_in_Mass() перед каждым циклом считывания файла try-catch программа отработала как надо smile 

Перед этим я ставил try-catch на все функции в Rabota() и была ошибка
Цитата

Index was outside the bounds of the array. 
at TH.Form23.RW_Data_in_Mass()
at TH.Form23.Rabota()

 smile

Добавлено через 4 минуты и 47 секунд
Неужели проблема в ДНК? Что же далать?
PM MAIL   Вверх
Experimenter
Дата 19.10.2007, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 4
Всего: 17



Главный претендент на исключение вот этот цикл:
Код

                    for (int m = 0; m < 9; m++) 
                    {
                        for (int e = 0; e < 20; e++) 
                        {
                            //особенно правая часть этого выражения
                            //а возможно, что и левая, ты не указал, что там
                            Ins_Tab.I_Tab[n][m, e] = int.Parse(strs[i]);
                            i++;
                        }
                    }

В файл "T_ASA" + nn + ".1" могут и ручками залезть любопытные, размер массива strs изменится, и лови его, исключение.
У тебя здесь нет проверки массива strs на его размерность, но тем не менее переменную i ты инкрементируешь без всяких оглядок.


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
okaton
Дата 19.10.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Код

public static class Ins_Tab 
        {
            public static int[][,] I_Tab;
            static Ins_Tab()
            {
                I_Tab = new int[4][,];
                for (int b = 0; b < 4; b++)
                {
                    I_Tab[b] = new int[9, 20];
                }
            }
        }


Про ручки и то что могут согласен
PM MAIL   Вверх
1stain
Дата 19.10.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



проблема в том, что i даже инкрементировать не надо, вылетит сразу, на strs[0]. Все дело в том, что у тебя файлы существуют и они не пустые, а на другом компе файла нет, он создается, но данных не содержит. Соответственно text = "" и массив strs не содержит ничего.

з.ы. 
Цитата(okaton @  19.10.2007,  20:21 Найти цитируемый пост)
Что интересно после возникновении ошибки на рабочем столе возникает T_ASA1.1 размером 0кb

ты сам почти нашел причину - ...T_ASA1.1 размером 0кb (а то что он возникает на рабочем столе, так программу запускают с рабочего стола, а путь для создания файла ты нигде не указываешь, так что все закономерно)

з.з.ы. а вообще, по-моему тебе нужно использвать сериализацию

Это сообщение отредактировал(а) 1stain - 19.10.2007, 21:23


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1853 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.