• Visual Studio调试器指南---使用线程和进程


    使用线程和进程是调试的重要组成部分。 Visual Studio 提供一个界面,在此界面中,可连接正在运行的待调试进程,可查看在那些进程中运行的附加进程和线程的有关信息,还可以控制正在调试的线程和进程的执行。

    在计算机科学中,“线程”和“进程”是两个相关的概念。 二者都表示必须按特定顺序执行的指令序列。 但是不同线程或进程中的指令可以并行执行。

    进程存在于操作系统内,并对应于用户可看作为程序或应用程序的事物。 另一方面,线程存在于进程内。 因此,线程有时也称作“轻量进程”。 每个进程都由一个或多个线程组成。

    多个进程的存在使得计算机能够一次执行多个任务。 而多个线程的存在使得进程能够分解工作以便并行执行。 在多处理器计算机上,进程或线程可以在不同的处理器中运行。 这使得真正的并行处理成为可能。

    并不总是能够完全并行处理。 有时候必须要同步线程。 一个线程可能必须等待另一个线程的结果,或者一个线程可能需要独占访问另一个线程正在使用的资源。 同步问题是多线程应用程序中出现 Bug 的一个常见原因。 有时候线程可能最终等待的是永远不会变得可用的资源。 这导致了一种称为“死锁”的状况。

    Visual Studio 调试器为调试线程和进程提供了功能强大但易于使用的工具。

    线程和进程

    在 Visual Studio 中用于处理进程的主要工具有“附加到进程”对话框、“进程”窗口和“调试位置”工具栏。 用于调试线程的主要工具有“线程”窗口、源窗口中的线程标记和“调试位置”工具栏。调试多线程应用程序的主要工具是“并行堆栈”和“并行任务”窗口。

    下面的表显示了可用信息以及可在以上每个位置执行的操作:

    用户界面

    可用信息

    可以执行的操作

    “附加到进程”对话框

    可以附加的可用进程:

    • 进程名 (.exe)

    • 进程 ID 号

    • 菜单栏标题

    • 类型(托管 v4.0;托管 v2.0、v1.1、v1.0;x86;x64;IA64)

    • 用户名(帐户名)

    • 会话号

    选择要附加的进程

    选择远程计算机

    更改用于连接远程计算机的传输类型

    “进程”窗口

    附加的进程:

    • 进程名

    • 进程 ID 号

    • 进程 .exe 的路径

    • 菜单栏标题

    • 状态(中断 运行)

    • 调试(本机、托管等。)

    • 传输类型(默认、无身份验证时仅限本机)

    • 传输限定符(远程计算机)

    工具:

    • 附加

    • 分离

    • 终止

    快捷菜单:

    • 附加

    • 分离

    • 调试停止时分离

    • 终止

    “线程”窗口

    当前进程中的线程:

    • 线程 ID

    • 托管 ID

    • 类别(主线程、接口线程、远程过程调用处理程序或辅助线程)

    • 线程名

    • 创建线程的位置

    • 优先级

    • 关联掩码

    • 挂起项计数

    • 进程名

    • 标志指示器

    • 挂起指示器

    工具:

    • 搜索

    • 搜索调用堆栈

    • 标记“仅我的代码”

    • 标记自定义模块选择

    • 分组依据

    • Columns

    • 展开/折叠调用堆栈

    • 展开/折叠组

    • 冻结/解冻线程

    快捷菜单:

    • 在源中显示线程

    • 切换到线程

    • 冻结一个正在运行的线程

    • 解冻冻结的线程

    • 标记一个线程以便进一步研究

    • 取消标记一个线程

    • 重命名一个线程

    • 显示和隐藏线程

    其他操作:

    • 查看数据提示中一个线程的调用堆栈

    源窗口

    左侧滚动条槽中的线程指示符指示单线程或多线程(默认情况下处于关闭状态,可通过使用“线程”窗口中的快捷菜单打开)

    快捷菜单:

    • 切换到线程

    • 标记一个线程以便进一步研究

    • 取消标记一个线程

    “调试位置”工具栏

    • 当前进程

    • 当前线程

    • 当前堆栈帧

    • 切换到另一个进程

    • 切换到当前进程中的另一个线程

    • 切换到当前线程中的另一个堆栈帧

    • 标记或取消标记当前线程

    • 仅显示标记的线程

    “并行堆栈”窗口

    • 一个窗口中多个线程的调用堆栈。

    • 每个线程的活动堆栈帧。

    • 任何方法的调用方和被调用方。

    • 筛选出指定的线程

    • 切换到“并行任务”视图

    • 标记或取消标记线程

    • 缩放

    “并行任务”窗口

    • 查看有关 Task 对象的信息,包括任务 ID、任务状态(已计划、正在运行、正在等待和已死锁)以及分配给任务的线程。

    • 调用堆栈中的当前位置。

    • 在创建时传递给任务的委托

    • 切换到当前任务

    • 标记或取消标记任务

    • 冻结或解冻任务

  • 相关阅读:
    发送邮件失败Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535
    文件上传报错:Current request is not a multipart request
    Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.
    IDEA——错误: 找不到或无法加载主类 com.Main
    浅识微服务架构
    ConcurrentHashMap底层实现原理(JDK1.8)源码分析
    Tiled Editor 图块的两种导入方式
    TileMap Editer 编辑器工具介绍
    Tiled 地图编辑器使用教程-官方demo
    log4net 基础
  • 原文地址:https://www.cnblogs.com/yilang/p/12456421.html
Copyright © 2020-2023  润新知