代码之家  ›  专栏  ›  技术社区  ›  Tim

我可以在visualstudio(c++)中设置断点来中断线程上下文切换吗?

  •  4
  • Tim  · 技术社区  · 16 年前

    我们只想打断一条线。你知道怎么做吗?在那种情况下,我似乎找不到破门而入的办法。

    我应该在课文中说得更具体些。正如标题所示,我想把上下文转换成线程。

    2 回复  |  直到 16 年前
        1
  •  3
  •   John Saunders    16 年前

    想象一下:当线程42被切换进来时,您设置了一个断点。断点命中。调试器已激活。现在,另一个线程被激活,线程42不再处于活动状态!


    Process Monitor Sysinternals

    20:43:51.9162409    lsass.exe   440 Thread Create       SUCCESS Thread ID: 5420
    20:43:51.9166730    lsass.exe   440 Thread Create       SUCCESS Thread ID: 7916
    20:43:53.2990544    svchost.exe 736 Thread Create       SUCCESS Thread ID: 5540
    20:43:53.7664146    svchost.exe 736 Thread Create       SUCCESS Thread ID: 7384
    20:43:53.7985662    svchost.exe 736 Thread Create       SUCCESS Thread ID: 1888
    20:43:54.2444922    wmiprvse.exe    3144    Thread Create       SUCCESS Thread ID: 6300
    20:43:54.2466447    svchost.exe 736 Thread Create       SUCCESS Thread ID: 5636
    20:43:54.2480367    wmiprvse.exe    3144    Thread Create       SUCCESS Thread ID: 6624
    20:43:54.2515443    svchost.exe 736 Thread Create       SUCCESS Thread ID: 7392
    20:43:55.5332047    devenv.exe  4640    Thread Exit     SUCCESS Thread ID: 4696, User Time: 0.0000000, Kernel Time: 0.0000000
    20:43:55.9179052    Explorer.EXE    3176    Process Create  C:\WINDOWS\system32\verclsid.exe    SUCCESS PID: 3356, Command line: /S /C {2559A1F4-21D7-11D4-BDAF-00C04F60B9F0} /I {000214E6-0000-0000-C000-000000000046} /X 0x401
    20:43:55.9179079    verclsid.exe    3356    Process Start       SUCCESS Parent PID: 3176
    20:43:55.9179101    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 7108
    20:43:55.9354621    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 940
    20:43:55.9521113    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 2704
    20:43:56.5259637    verclsid.exe    3356    Thread Exit     SUCCESS Thread ID: 2704, User Time: 0.0000000, Kernel Time: 0.0000000
    

    您还可以执行各种其他过滤,这应该允许您在问题发生之前保持实用程序运行,即使在生产中也是如此。

        2
  •  13
  •   JaredPar    16 年前

    您需要设置断点筛选器。右键单击断点并选择Filter选项。它将显示一个对话框,允许您将断点筛选为特定的线程ID、线程名称、进程ID、进程名称甚至机器名称。

    ThreadId = 42