Tag: debugging

调试IEnumerable方法

我有一个返回IEnumerable ,我正在尝试调试该方法中的代码。 每次我在调试期间单步执行Visual Studio中的代码时,它都会跳过相关方法。 当我在方法中放置一个断点时,它永远不会被击中。 代码肯定是运行的,因为我已经通过yield return来自方法的假T来测试。 是不可能以这种方式调试IEnumerable方法,还是我做错了什么?

在调试时,有没有办法判断对象是否是另一个实例?

在调试时,我期待两个不同的类使用相同的对象实例。 这两个对象的所有属性都相同,但它们是两个不同的实例。 有没有办法在VS调试器中告诉它? 为了确定,我能够在课程中添加一个字段: private string someId = Guid.NewGuid().ToString(); 然后,在调试时,我至少可以查看两个实例中每个实例的字段。 有没有更好的方法不需要创建这个虚拟ID字段?

如何调试Linq Lambda表达式?

我正在使用Entity Framework和Linq to Entitites。 我想知道Visual Studio 2012中是否有任何方法可以逐步调试此代码。 在放置断点的那一刻,光标越过它但不会进入。 我更感兴趣的是看到xe的值..而不是例如生成的sql。 注意:我可以使用其他工具或Visual Studio插件。 IEnumerable eventToPushCollage = eventsForEvaluation .GroupJoin(eventCustomRepository.FindAllPushedEvents(), e => e.Id, p => p.PushedEventId, (e, p) => new { e, p }) .Where(x => xeDateTimeStart > currentDateTime && currentDateTime >= xeDateTimeStart.AddMinutes(defaultReminders) && // Data from default reminder for collage event in web.config xpCount() == 0) // Check […]

DEBUG ERROR:在vc ++项目中使用COM时出现所需的运行时?

我为我的工作创建了一个COM组件。 我也注册了该组件。 在我的系统上,我有两个VM工作站。 在我的第一个工作站,它工作正常。 在我的第二个工作站中,它会显示一个错误框,其中包含此程序需要朗读的消息并以不寻常的方式关闭请联系应用程序管理员 。 我认为这是因为没有在第二个工作中注册dll然后我注册并且它工作正常。 当我试图在win2k8机器上测试相同时,即使我成功注册COM组件,它显示上面说的erroe窗口? 任何人都可以帮我理解这个吗? 提前致谢…

在ASP.NET MVC中跟踪LINQ TO SQL生成的查询

关于LINQ to SQL生成的查询输出的快速问题。 我在ASP.NET MVC项目Visual Studio 2008中,我正在尝试MSDN文档中的建议: MyDataContext _dc = new MyDataContext(); _dc.Log = Console.Out; 但是“输出”窗口(CTRL + Alt + O)上没有显示任何内容。 是否还需要配置其他内容才能使LINQ to SQL将调试信息转储到Visual Studio 2008中的“输出”窗口? 我不知道它是否有任何区别,但我的实体(和MyDataContext类)位于一个单独的类库项目中。

Debugger.Launch不工作

我目前正在尝试为外部启动的进程启动调试器(而不是从visual studio中启动)。 我似乎无法让调试器实际启动,因为它似乎没有任何反应。 在这个过程中,我添加了这段代码: Debug.Assert(Debugger.IsAttached == false, “Should be no debugger”); if (!Debugger.IsAttached) { Debug.Assert(Debugger.Launch(), “Debugger not launched”); } Debugger.Break(); Debug.Assert(Debugger.IsAttached == true, “Debugger should be attached”); 断言是为了证实我并不疯狂。 首先, IsAttached属性返回false,正如我所期望的那样。 然后我调用Debugger.Launch ,然后返回true 。 根据Debugger.Launch的MSDN文档,它表示如果成功启动调试器,或者如果已连接调试器,它将仅返回true。 我确认一个没有附加,所以它必须启动一个。 断点永远不会被击中,第二次validation失败( IsAttached属性返回false)。 我也尝试在Debugger.Launch之后暂停一下,给它一些时间,但无济于事。 有什么建议?

使用本机C ++,托管c ++ cli和c#解决方案在混合模式下进行调试

我有一个multithreading项目正在进行中,启动项目设置为运行我的UI的ac #project。 然后有一系列基础c ++本机项目,它们通过托管C ++ / CLI项目连接到C#。 我在c#启动项目中启用了“启用非托管调试”,当我尝试调试本机代码时,我能够达到我设置的断点。 但是,在我尝试再次运行并尝试再次达到断点之后,它会挂起。 例如,如果我有一个循环,我尝试在每次迭代中触及它,在第二次迭代后程序挂起并且我必须强制退出。 我在Visual Studio 2010中工作。调试开始certificate在这个速度下不太有用,有没有办法排除这个问题?

使用VS2010在混合C#C(win32)项目中未加载符号

我的项目有几个新的C#模块和一个使用win32系统调用编译的C模块(不是C ++)。 我正在使用PInvoke互操作层从C#调用C代码。 C函数被调用。 所有模块都写入单个bin目录和所有写入pdb文件。 在运行,然后在调用C.dll之前在断点处停止时,我看到C模块中的断点被禁用。 查看Debug | Windows | Modules列表,即使在执行调用后,我也看不到C.dll模块已加载。 另一个事实:在解决方案|属性|配置属性|配置中显示使用Platform =“Any CPU”的C#模块和使用“Win32”的C模块 为什么不加载模块,为什么不加载它的符号? 谢谢,马克斯

如何计算.NET应用程序中的并发线程数量?

阅读Parallel.ForEach后继续产生新线程我仍然怀疑它是否是计算并发线程数的正确方法? 我看到的是,该方法计算Parallel.ForEach中同时输入但未完成的迭代(循环)的数量。 它是传递正确数量的同时运行线程的并发线程数的同义词吗? 我不是专家,但我可以想象: 线程可以重新使用,而其活动在某处交换以便以后继续。 从理论上讲,用于循环活动的线程在循环完成后保留在线程池中,但不会重新用于另一个循环 或者有什么可能扭曲实验的纯度(线程计数)? 无论如何,如何直接计算.NET进程的运行线程数,最好是(C#)代码? 更新: 所以,如果要遵循Jeppe Stig Nielsen的回答并使用计数 directThreadsCount = Process.GetCurrentProcess().Threads.Count; 然后输出,在Release(threadsCount == 7)和Debug(threadsCount == 15)模式下非常相似: [Job 0 complete. 2 threads remaining but directThreadsCount == 7 [Job 1 complete. 1 threads remaining but directThreadsCount == 7 [Job 2 complete. 2 threads remaining but directThreadsCount == 7 [Job 4 complete. 2 threads […]

string.GetHashCode()在debug vs release中返回不同的值,我该如何避免这种情况?

令我惊讶的是,下面的方法在debug和release中产生了不同的结果: int result = “test”.GetHashCode(); 有什么方法可以避免这种情况吗? 我需要一种可靠的方法来散列字符串,我需要在调试和发布模式下保持一致的值。 如果可能的话,我想避免编写自己的哈希函数。 为什么会这样? 仅供参考,reflection器给了我: [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), SecuritySafeCritical] public override unsafe int GetHashCode() { fixed (char* str = ((char*) this)) { char* chPtr = str; int num = 0x15051505; int num2 = num; int* numPtr = (int*) chPtr; for (int i = this.Length; i > 0; i -= 4) { […]