Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Не работает breakpoint?


Автор: myendlessness 22.10.2010, 12:15
Есть очень простая программа:
Код

using System;
using System.IO;

namespace Ha
{
    class HaReadWrite { 
    public static void Main(string[] args) {
        
        // Variables
        FileStream fin;
        int i;       
        
       // Looking for exceptions
        try {
            fin = new FileStream("Sc.bin", FileMode.Open, FileAccess.ReadWrite);
        } catch(FileNotFoundException exc) {
            Console.WriteLine(exc.Message);
            return;
        } 
        
        //Read a file
        short[] mas = new short[4096];
        int j=0;
        do
        {
            try
            {
                i = fin.ReadByte();
                mas[j] = (short)i;
                j++;
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                return;
            }
            if (i != -1) Console.Write((char)i);
        } while (i != -1);
        
      fin.Close();   - здесь breakpoint
      }
    }
}


  Ставлю на "Close" breakpoint, но программа пролетает, всё работает без ошибок, но программа не останавливается там где надо! Подскажите, пожалуйста, в чём проблема? Среда разработки Microsoft Visual Studio 2008 C#

Автор: Мурлыкатам_ 22.10.2010, 12:39
Какая милая программа smile

Брикпоинт может не работать с моей точки зрения в вижл студии в том случае, если управление туда не заходит.
Т.е. ввиду твоей логики программа не попадает в эту строчку. Это очень просто проверить. Добавь перед фин.клозе:

Код

Console.WriteLine("Fin close");

Или Trace.WriteLine(...); если в конфиге лог сконигурирован.

И посмотри, что выйдет smile

Просто добавь в это место еще какой-нить код и поставь туда брикпоинт.

перед:
Код

fin.Close();   - здесь breakpoint

Всегда нужно сделать проверку: 
Код

if(fin != null) fin.Close();

или использовать using.

Еще маленькая подсказка, зачем так трахаться с чтением байтов? smile
Всю вашу программу можно заменить на:
Код

try {
byte[] mass = File.ReadAllBytes("Sc.bin");
short[] massShort = new short[mass.Length];
for(int i =0; i<mass.Length; i++) {
   massShort[i] = (short) mass[i];
}
foreach(Short sh in massShort) Console.WriteLine((char)sh);
} catch(Exception ex) {
// TODO EXCEPTION HANDLING
}


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

Console.WriteLine(File.ReadAllText(... path to file....));

Автор: Kaerus 22.10.2010, 12:43
myendlessness
Поставь breakpoint на 34 строке, у тебя скорее всего исключение из-за переполнения буфера (размер файла больше 4096 байт)
Код

short[] mas = new short[4096];

Замени на
Код

short[] mas = new short[fin.Length];

Автор: Мурлыкатам_ 22.10.2010, 12:47
Цитата(Kaerus @ 22.10.2010,  12:43)
myendlessness
Поставь breakpoint на 34 строке, у тебя скорее всего исключение из-за переполнения буфера (размер файла больше 4096 байт)
Код

short[] mas = new short[4096];

Код

 try
            {
                i = fin.ReadByte();
                mas[j] = (short)i;
                j++;
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                return;
            }


Оно же в трай кэче. Зашло бы все ровно на фин клоз. А епта!  
Console.WriteLine(exc.Message);
                return; <-------------------------------------------------- Выход smile

Автор: myendlessness 22.10.2010, 14:54
Ребята, Вы волшебники, спасибо Мурлакатам, спасибо Kaerus!  smile Давно не программировал, многое забылось. Действительно не срабатывала из-за переполнения буфера. Мурлакатам спасибо за код, попробую переписать иначе, многое надо вспоминать с нуля.   

Автор: Kolovorot 14.12.2010, 15:31
А меня breakpoint начал проскакивать после переустанвоки VS2008. Принтскрин:
 http://s1.ipicture.ru/Gallery/Viewfull/2597722.html
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)