C# 通过在变量更改时调试来跟踪错误

C# 通过在变量更改时调试来跟踪错误,c#,debugging,C#,Debugging,我是一个编程新手,很难追踪bug,这是因为通常会在手表上放置一个变量,然后一直按f5直到我注意到一些变化。我使用的是visual c#2010,我有18000行代码,所以只有运气好,我才能抓住这个问题 有没有一种方法可以在变量更改时立即转到代码行?您可以设置条件断点,只有在满足条件时才会命中该断点 所以,假设你有一个索引变量indx,你可以设置一个条件断点,当值=7时说“仅停止”,然后当条件改变时,它会在那里停止 看看这个 在本教程中。您可以设置条件断点,只有在满足条件时才会命中 所以,假设你有

我是一个编程新手,很难追踪bug,这是因为通常会在手表上放置一个变量,然后一直按f5直到我注意到一些变化。我使用的是visual c#2010,我有18000行代码,所以只有运气好,我才能抓住这个问题


有没有一种方法可以在变量更改时立即转到代码行?

您可以设置条件断点,只有在满足条件时才会命中该断点

所以,假设你有一个索引变量indx,你可以设置一个条件断点,当值=7时说“仅停止”,然后当条件改变时,它会在那里停止

看看这个

在本教程中。

您可以设置条件断点,只有在满足条件时才会命中

所以,假设你有一个索引变量indx,你可以设置一个条件断点,当值=7时说“仅停止”,然后当条件改变时,它会在那里停止

看看这个

在本教程中。

在本机代码中,最好设置一个数据断点。无论更改来自何处,数据断点都会在数据更改时触发


但是,您不能为.NET执行此操作。当变量的值更改时,不能要求调试器中断。但是,并不是所有的希望都破灭了。对相关变量执行“查找Usages”或“查找引用”,以查找代码中使用该变量的所有位置。然后在每个位置设置一个断点,以查看变量值何时更改。

在本机代码中,最好设置一个数据断点。无论更改来自何处,数据断点都会在数据更改时触发


但是,您不能为.NET执行此操作。当变量的值更改时,不能要求调试器中断。但是,并不是所有的希望都破灭了。对相关变量执行“查找Usages”或“查找引用”,以查找代码中使用该变量的所有位置。然后在每个位置设置一个断点,以查看变量值何时更改。

您可以将变量更改为并在setter上设置一个断点。然后,您可以有一个断点,每次代码更改其值时都会命中该断点

因此,如果你有:

int myVariable;
将其更改为:

int myVariable {
   get;
   set; // <-- Put your breakpoint here
}
int myVariable{
收到

set;//您可以将变量更改为,并在setter上设置一个断点。然后,您可以有一个断点,每次代码更改其值时都会命中该断点

因此,如果你有:

int myVariable;
将其更改为:

int myVariable {
   get;
   set; // <-- Put your breakpoint here
}
int myVariable{
收到

set;//这听起来像是一个设计问题。理想情况下,您应该将变量更改的位置限制在代码中非常特定的位置。这是避免使用全局变量和静态变量的原因之一,除非您有很好的理由使用它们。即使如此,您也应该将访问器方法定义为这些变量的接口,而不是而不是直接改变它们


在调试代码时,我建议您寻找改进的方法,以便将来调试不会那么困难。

这听起来像是一个设计问题。理想情况下,您应该将变量更改的位置限制在代码中非常特定的位置。这是避免全局变量和静态变量的原因之一,除非您我有很好的理由使用它们。即使如此,您也应该将访问器方法定义为这些变量的接口,而不是直接更改它们


在调试代码时,我建议您寻找改进代码的方法,以便将来调试不会那么困难。

但是,这种方法需要我在EveryLine中插入断点,就像其他答案所说的那样,听起来您的问题比设计上要深一点。但是,这种方法需要我插入断点在EveryLine中的int就像其他答案所说的,从设计角度看,听起来你的问题有点深。这对我来说相当复杂,你能让你的答案更容易理解吗?@ng80092a我不确定一个属性有什么这么复杂。我在我的答案中添加了一个例子。这对我来说相当复杂,你能让你的答案更容易理解吗?@ng80092a我不确定一个属性有什么这么复杂。我在答案中添加了一个例子。是的,我正在努力学习不垃圾邮件:(我已经解决了所有问题:)我应该使用什么样的设计值呢?我在谷歌上找到了,但没有具体说明it@ng80092a面向对象设计是一个巨大的主题,不能轻易地在一个博客或问答中涵盖。关于这个主题,肯定有很多信息,包括许多印刷书籍。是的,我正在努力学习不要垃圾代码:(到目前为止,我已经解决了所有的问题:)我应该使用什么样的设计值?我在谷歌上找到了它,但没有具体说明it@ng80092a面向对象设计是一个巨大的主题,不能轻易地在一个博客或问答中涵盖。当然,关于这个主题有很多信息,包括许多印刷书籍。