C# 创建枚举时的断点

C# 创建枚举时的断点,c#,debugging,enums,C#,Debugging,Enums,我有一个枚举,我正在试图弄清楚到底是什么代码在创建它的一个实例。我有很多代码,我相当确定我正在寻找的代码是在我当前解决方案中没有的许多模糊项目中的一个,因此“查找用法”将不起作用 我知道枚举上没有构造函数,但我真的希望在任何代码创建和使用此枚举时,都能找到一种方法来中断执行并检查调用堆栈。我曾尝试在单个枚举值上设置断点,但它们从不切换,即使我知道正在使用断点 这是可能的,还是我需要采用不同的路径来查找我要查找的内容。您可以使用查找所有引用,然后可以在适当的位置设置断点。您可以使用VS中的对象浏览

我有一个枚举,我正在试图弄清楚到底是什么代码在创建它的一个实例。我有很多代码,我相当确定我正在寻找的代码是在我当前解决方案中没有的许多模糊项目中的一个,因此“查找用法”将不起作用

我知道枚举上没有构造函数,但我真的希望在任何代码创建和使用此枚举时,都能找到一种方法来中断执行并检查调用堆栈。我曾尝试在单个枚举值上设置断点,但它们从不切换,即使我知道正在使用断点


这是可能的,还是我需要采用不同的路径来查找我要查找的内容。

您可以使用
查找所有引用,然后可以在适当的位置设置断点。

您可以使用VS中的对象浏览器来搜索您的枚举。它包括引用的程序集(但不是作为项目的解决方案的一部分)。

如果您控制枚举本身的代码,那么从技术上讲这是可能的:

  • 将YourEnum重命名为YourEnumInternal
  • 创建类YourEnum并为YourEnumInternal中的每个值放置一个同名属性,然后返回YourEnumInternal的相应成员
  • 在每个属性中放置断点

  • 此外,如果您真正想做的是在将此枚举的成员添加到特定集合时查看调用堆栈(如您在评论中所述),为什么不查找集合上的用法(可能范围更小?)并放置断点(或者更好的是,使用$CALLSTACK psuedovariable设置跟踪点)无论项目添加到何处?

    您是否查看了关联菜单中的“查找所有引用”功能?是否可以使用“转到定义”菜单选项查找它?或者“查找所有引用”以查看其使用位置?另外,使用对象浏览器查找它。是的,我尝试查找所有引用。在这种情况下,这是不够的,因为不是所有使用我的枚举的代码都加载到我的当前解决方案中,我也不能全部加载,因为我不知道调用它的代码在哪里,而且可能有100个其他项目。查找所有引用仅适用于当前解决方案中加载的代码。这是在一个核心包中,该包被许多代码引用,而这些代码不在我当前的解决方案中,因此不可能全部加载。@CMP,如果这不可行,为什么要考虑查找枚举的所有用途?如果您计划更改枚举,您将破坏部分(可能全部)代码,因此您必须查看所有这些代码。我不想找到所有用法。这不是我的意图。我希望在某些执行路径中使用堆栈跟踪时进行调试并查看它。我并没有试图更改枚举,而是推断哪些代码正在填充它们的特定集合。这似乎是不可能的,所以我需要深入研究代码来解决这个问题。CMP-将鼠标移动到一个标记为相关枚举的变量上。这将公开它所在的框架。您可以使用此信息来确定它是哪个项目。如果你真的有100个项目链接在一起,我强烈建议你继续写文档。这是一个很酷的想法。我已经找到了我要找的东西,但我最好奇的是,在技术上是否可以扩展枚举以这种方式调试它们。我必须重新生成所有现有代码才能使用类而不是枚举,但这并不太糟糕。@CMP,加载和查找所有引用太多,但重新生成所有代码可以吗?我不明白…代码库非常混乱,很难导航。没有关系。