C#写的winform, 只要调试的是线程就无法调试, 一模一样的代码, 改成不使用线程调用就可以调试.
现在每次调试之前都得改一下调用代码, 非常烦人. 有哪位碰到过这种问题么, 是怎么解决的.现在用的是vs.net2005, 以前的旧版也出现过这种问题.

解决方案 »

  1.   

    1.线程对话框
    2.日志记录
    3.挂起 Thread.Sleep(3000);
      

  2.   

    VS2005(Visual Studio 2005)中命令窗口的使用里有线程调试
    http://blog.csdn.net/Octavius/archive/2008/11/25/3369496.aspx
      

  3.   

    谢谢大家的回复,我的代码很简单的.System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Test));
    t.Start();
    这样就没法调试Test();
    不使用线程直接调用这个方法就可以调试了.
      

  4.   

    肯定是在test里打断点了, 问题就是用
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Test)); 
    t.Start(); 
    这种方式到了断点位置后就不能往下执行了. 不使用线程就可以到达断点并往下调试.
      

  5.   

    加上t.debugThread.IsBackground = true;试试
      

  6.   

    #11楼 加了也没有反应.这么简单的问题就没有必要代码了吧. 就在Test方法里面随便打一个断点, 能跟到这个断点, 但是没办法往下面执行. 不用线程就可以了.说起来惭愧, 从2001年开始用vs.net, 连个这么简单的问题都搞不定啊.
      

  7.   

    明白楼主的意思了,原因是每个线程都被CPU分配了一定时间的时间片来执行,过了那个时间片当然会转到下个线程执行了,所有你误认为设的断点不起作用。解决办法就是用TeamSuit版本的VS调试时打开线程窗口
      

  8.   

    是不是你的Test()访问了非线程安全的东西,不贴代码人家没法帮你分析的。线程很容易出现错误的
      

  9.   

    代码没有问题, 应该是vs.net的原因. 而且前段时间是可以的, 应该重装一下也行了.        private void btnStart_Click(object sender, EventArgs e)
            {
                System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Test));
                t.Start();
            }        private void Test()
            {
                int mid;
                mid = 1;
                mid = mid * 9;
                mid = mid * 10;
            }断点打在mid = 1; 上, 但是没办法往下执行了.
    真是烦人啊.
      

  10.   

    6楼正解,子线程已经跳过去了曾经为了这个问题费了好长时间的脑子嫌麻烦的话,Debug输出也是不错的方法。
      

  11.   

    Debug输出在很多情况下不方便使用的, 例如在调试数据库程序时, 打断点有时候发现数据不对可以马上停下来.谢谢大家的回帖.
      

  12.   

    使用vs2008,选择调试->窗口->线程,就可以在断点时看到所有运行的线程.并且双击每一个线程就可以切换到其所在的位置