我继承了一个由三个级别的代码组成的项目。最低层是与硬件交互的本机C ++。这是成熟,稳定和经过充分测试的。中级代码是C ++ / CLI,它与包含UI元素和一些附加功能的顶级C#代码交互。这个C#代码是不完整的,并且在开发中匆忙:它经常崩溃并且不适合用途。我的任务是调试并完成它。
我正在使用VS 2008逐步完成多线程代码,以了解从这个项目开始的位置。简单的问题:在Threads窗口中,我有两个命名线程:一个与一些底层硬件(即C ++代码)和一个用户界面线程通信的Worker线程。
然而,单步执行代码,有很多工作线程没有名称,也没有与之关联的调用堆栈,看起来似乎是随机的。它们在“调试位置”工具栏中没有条目,并且当选择“在源中显示线程”时,它们似乎在代码中不可见。它们是什么,我应该关注它们吗?它们似乎不是来自本机代码(因为它使用Boost进行线程化,这从调用堆栈中可以清楚地看出)。冻结它们或改变它们的优先级似乎没有任何效果。
我没有调试过这种复杂性的多线程代码,所以任何建议都非常赞赏!
答案 0 :(得分:2)
除了应用程序的线程之外,.NET应用程序中还有一些其他线程。运行时使用专用线程来运行终结器。正如driis指出的那样,你也可以看到线程池线程。调试器也会启动一个线程。如果你正在使用vshost,你会得到a bit of overhead an additional threads。
答案 1 :(得分:1)
这些线程可能是.NET ThreadPool个线程。