代码之家  ›  专栏  ›  技术社区  ›  mare

停止vs调试器时会发生什么?

  •  0
  • mare  · 技术社区  · 14 年前

    如果我有这样的台词

    ContentRepository.Update(existing);
    

    它将进入数据存储库以更新某些对象,我在此更新函数中有一个try..catch块,如下所示:

            string file = XmlProvider.DataStorePhysicalPath + o.GetType().Name + Path.DirectorySeparatorChar + o.Slug + ".xml";
            DataContractSerializer dcs = new DataContractSerializer(typeof (BaseContentObject));
            using (
                XmlDictionaryWriter myWriter =
                    XmlDictionaryWriter.CreateTextWriter(new FileStream(file, FileMode.Truncate, FileAccess.Write),
                                                         Encoding.UTF8))
            {
                try
                {
                    dcs.WriteObject(myWriter, o);
                    myWriter.Close();
                }
                catch (Exception)
                {
                    // if anything goes wrong, delete the created file
                    if (File.Exists(file))
                        File.Delete(file);
                    if(myWriter.WriteState!=WriteState.Closed)
                        myWriter.Close();
                }
            }
    

    那么,如果我在上面一行的调试会话中单击“停止”,Visual Studio为什么还要继续调用update()?

    例如,我是通过按F10一行一行地走到那一行的,现在我在那一行,那一行是黄色的,我按停止键。

    显然,发生的是,vs执行update()方法,不知何故发现了错误,进入“catch”并删除文件,这是错误的,因为我希望在出现真正的异常时(而不是在调试程序并强制停止程序时)使用catch。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Noon Silk    14 年前

    这取决于调试器分离是否结束了进程。否则,程序将继续运行。如果是这样,那就不会了。