调试多线程程序一般有以下几种办法

1、在日志的某个地方写日志文件。

优点:不会干扰程序的执行,特别是对网络的多线程通信。

缺点:每次都需要打开日志文件以查看进程运行的信息。

2、利用断点进行调试。

优点:直观,可以直接看到运行过程的值

缺点:在多个线程设置断点,可能让程序跳来跳去,还需要额外地分出一部分精力用来理清程序的逻辑

3、利用弹出窗口来查看进程调试的信息。

优点;直观

缺点;在调试网路通信的时候,使得通信的过程产生延时,导致通信失败。

4、利用vs自带的线程窗口来调试

优点:直观,可以直接从进程图上看到哪个进程是活动进程,哪些进程处于阻塞状态。

缺点:需要结合断点调试,基本上就是断点调试的加强版

前面三种都比较基础大多数人应该已经掌握了 ,下面针对第四种再详细说明下:

比如以下示例:开了两个线程

            Task.Run(() =>{var count = 0;while(true){Thread.Sleep(1000);Console.WriteLine($"{count}");count++;}});Task.Run(() =>{var count = 0.12345;while (true){Thread.Sleep(1000);Console.WriteLine($"{count}");count += 0.1; ;}});

我仅在第一个线程设置了断点,只想在第一线程跟踪变量变化,但是实际上单步调试的时候你会发现,程序会跳来跳去,一会儿再上面哪个线程,一会儿又在下面哪个线程执行,

这时候的一般的做法是:

这是我做的:

  1. 设置一个条件断点,我知道这个断点只会出现在我正在寻找的线程上。

  2. 一旦断点命中并且你在你想要的线程中,在Visual Studio线程窗口中(在调试,调试 - > Windows - >线程时),Ctrl+ A(选择所有线程),然后Ctrl+单击您当前所在的线程。除了要调试的线程之外,您应该拥有所有线程。

  3. 单击鼠标右键,然后选择“冻结”。

但是实际上:

冻结/解冻线程是一种不正确的方式,因为其他线程不执行任何代码。

最正确和最有用的方法是:

  1. 在断点窗口中按Ctrl + A(选择所有断点)。

  2. 右键单击并选择“过滤器...”。

  3. 输入“ThreadId =(当前线程ID)”。

Visual Studio 2015及更高版本中,过程类似于:

  1. 在断点窗口中按Ctrl + A(选择所有断点)。

  2. 右键单击并选择“设置...”。

  3. 选中“条件”,然后在下拉列表中选择“过滤器”

  4. 输入“ThreadId =(当前线程ID)”。

所以所有线程都被执行,但调试器仅在当前线程上命中。

C#使用线程窗口调试多线程程序相关推荐

  1. 利用C#线程窗口调试多线程程序

    从网上的资料判断,调试多线程程序似乎就一下3种方法. 1.在日志的某个地方写日志文件. 优点:不会干扰程序的执行,特别是对网络的多线程通信. 缺点:每次都需要打开日志文件以查看进程运行的信息. 2.利 ...

  2. GDB调试多线程程序

    (1)gdb ./program运行程序 (2)程序挂掉 (3)info thread查看程序挂掉瞬间所有运行线程执行到的位置: 此时,可以粗略看到哪些线程执行出现了问题(线程号前面带*的表示当前线程 ...

  3. vc调试多线程程序的方法

    1.对一条特定的线程进行调试           Visual   C++调试器支持多线的情况,如果你在许多线程都调用的函数中           设置一个断点,每当一个线程遭遇到此断点,调试器就会在 ...

  4. 使用“/proc”系统调试多线程程序挂死的问题:

    问题描述:线程retint_careful问题:GDB调试卡主卡死挂住:pstack指令卡死卡主挂住: 1. GDB调试多线程 # gdb GNU gdb (GDB) Red Hat Enterpri ...

  5. python gdb调试_使用GDB调试Python程序

    最近在为一个监控系统开发agent,需要支持Linux.FreeBSD及Windows等操作系统.复杂的线上环境,带来了一系列诡异的问题,尽管代码上线前在为数不少的测试机器验证过. coredump文 ...

  6. OD 调试多线程遇到的问题以及解决方法

    1.无法单步调试 在调试多线程程序的时候,如果遇到断点能断下来,但是一按F7/F8程序就运行起来了,这种情况多半是线程被挂起了 首先是去看看线程窗口,是不是有线程被挂起来,如果有,右键-->Re ...

  7. [C++11 std::thread] 使用C++11 编写 Linux 多线程程序

    From: http://www.ibm.com/developerworks/cn/linux/1412_zhupx_thread/index.html 本文讲述了如何使用 C++11 编写 Lin ...

  8. Linux多线程实践(10) --使用 C++11 编写 Linux 多线程程序

    在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程序,从 ...

  9. Eclipse调试多线程代码

    Eclipse调试多线程代码 标签: eclipse 调试 多线程 | 发表时间:2013-02-16 05:51 | 作者:czjuttsw 分享到: 出处:http://blog.csdn.net ...

最新文章

  1. mac下java 开发环境搭建
  2. sublime text3 怎么配置、运行python_怎么用sublime text 3搭建python 的ide?
  3. do while循环语句_流程控制之循环语句【while循环语句】
  4. ABAP程序打印Spool Request到PDF
  5. Linux下安装Oracle遇到的错误
  6. 【追加功能】OFFICE插件管理工具重整后再上路,更好用易用。
  7. BugkuCTF-Reverse题easy-100(LCTF)
  8. swift和OC混编
  9. 那些我当了程序员以后才理解的崩溃瞬间!
  10. 【TensorFlow】TensorFlow函数精讲之tf.nn.conv2d()
  11. go实现区块链[3]-遍历区块链与数据库持久化
  12. python退出帮助系统_Python退出脚本并返回Main
  13. 电脑键盘打字手法_电脑快速打字技巧,送个每一位初学者
  14. 【开发日常】手动安装fastboot驱动(开发板连不上minitool)
  15. 电脑右键打印不见了_win7右键没有打印选项怎么办|右键菜单没有压缩选项怎么解决|右键没有图形选项解决方法-系统城...
  16. 深度学习在摄影技术中的应用与发展
  17. python获取期货数据_【python量化】期货ML策略(一)数据获取
  18. java操作word替换文字和在固定位置插入表格
  19. 通过此方法可以揭秘iPhone与其他蓝牙产品的交互流程啦,iPhone蓝牙HCI log的抓取方式详解
  20. 微信开发者工具中使用vant库

热门文章

  1. IIS7中使用集成模式时出现HttpException
  2. Laravel 5 多个视图共享数据的方法
  3. 独家 | 蚂蚁金服TRaaS技术风险防控平台解密
  4. 深入浅出Mybatis系列(一)---Mybatis入门[转]
  5. WPF里面的常用笔刷
  6. 深入浅出Google Android这本书怎么样
  7. 装上了Visual Studio 2005
  8. c语言编手机蓝牙软件的代码,51单片机C语言的简易蓝牙锁代码
  9. LuckyDraw bot有幸被提名为微软2019的People's Choice app
  10. 使用iOS 4越狱iPhone或iPod Touch