Windbg可以显示线程名称吗?

2024-01-09

Windbg应该明白 https://groups.google.com/forum/#!topic/microsoft.public.windbg/2atvu7h3D3c the MS异常协议 https://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx用于将线程名称传递给调试器。

我无法让它发挥作用。在网上查看有很多示例显示没有线程名称的“~”线程列表,这就是我所看到的。我正在调试 .NET x86 进程,并且尝试了 Windbg 的 WDK 8.1 x86 和 x64 版本。

有谁知道这个功能是否仍然可用?我缺少什么?


对于 .NET 线程,以下内容适用于“正常”Threads (手动创建线程,因为我不知道命名线程池线程的方法):

A Thread是一个类,因此可以在 .NET 托管堆中找到:

0:000>.loadby sos clr
0:000> !dumpheap -stat -type Thread
      MT    Count    TotalSize Class Name
...
725e4960       11          572 System.Threading.Thread

请注意,还有其他输出,因为!dumpheap查找类名的一部分。然而,方法表(MT)唯一地标识了一个类,所以这就是我们从现在开始使用的:

0:000> !dumpheap -short -mt 725e4960
023123d0
02312464
02313c80
...

这些是地址Thread对象。由于它是干净的输出,我们可以在循环中使用它:

0:000> .foreach (address {!dumpheap -short -mt 725e4960}) {.echo ${address} }
023123d0
02312464
02313c80    
...

在循环内部,我们可以使用地址来获取有关线程的更多信息。首先,让我们了解一下线程的内部结构:

0:000> !do 023123d0
Name:        System.Threading.Thread
...
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
...
725e3e18  400076e        c        System.String  0 instance 02313c0c m_Name
...

偏移处+0xC(取决于位数!),有m_Name成员。那是一个字符串。让我们看看字符串是什么样子的:

0:000> !do poi(023123d0+c)
Name:        System.String
...
Fields:
      MT    Field   Offset                 Type VT     Attr    Value Name
...
725e4810  40000ac        8          System.Char  1 instance       4d m_firstChar

所以,字符串的第一个字符位于偏移量处+0x08。 .NET 中的字符串是 Unicode,因此我们可以使用以下命令查看它du:

0:000> du poi(023123d0+c)+8
02313c14  "My named thread 0"

将所有这些知识合并到一个命令中:

.foreach (address {!dumpheap -short -mt 725e4960})
{
    du poi(${address}+c)+8
}

(为了便于阅读而格式化,将其全部放在一行中)

如果你尝试这样做,你会发现它可能会输出类似的内容

00000008  "????????????????????????????????"

发生这种情况时m_Name is null。如果您关心这一点,可以添加对 null 的检查:

.foreach (address {!dumpheap -short -mt 725e4960})
{
    .if (poi(${address}+c) != 0) {
        du poi(${address}+c)+8
    }
}

(为了便于阅读而格式化,将其全部放在一行中)

其他改进:

  • 对线程 ID 执行相同操作
  • 美化输出(使用.printf代替dd and du)

最后结果:

.foreach (address {!dumpheap -short -mt 725e4960}) 
{
    .if (poi(${address}+c) != 0) 
    {
        .printf "%d ",poi(${address}+28);
        .printf "%mu\r\n", poi(${address}+c)+8
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windbg可以显示线程名称吗? 的相关文章

  • 检测 404 而不捕获异常

    简单功能 检查网络服务器是否返回非 200 HTTP 状态 Private Function RemoteFileOk ByVal Url As String As Boolean Dim req As HttpWebRequest Try
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 执行鼠标单击而不移动光标

    除了移动光标之外 我找不到任何解决方案Cursor类 点击mouse event然后将光标移动到原来的位置 我正在玩SendInput现在可以运行 但仍然没有机会找到好的解决方案 有什么建议吗 您应该使用 Win32 API 使用 user
  • 在 Windows 上使用 pycrypto 时如何修复“ImportError:无法从 Crypto.Cipher 导入名称 _AES”?

    我在 Crypto 的 Cipher 模块中有 AES Python27 Lib Crypto Cipher AES 当我尝试做的时候 from Crypto Cipher import AES 我收到以下错误 Traceback most
  • 检测笔记本电脑盖子的关闭和打开

    是否可以检测笔记本电脑的盖子何时打开或关闭 从我读到的内容来看 这是不可能的 但 SO 之前已经帮助我完成了不可能的任务 我发现唯一可能朝着正确方向的事情是关于报告电源按钮所需的 IOCTL 的 MSDN 博客文章 https learn
  • Visual Studio 2010“找不到或打开 PDB 文件”

    我尝试在 Visual Studio 10 中调试程序 但遇到断点问题 我将与 dll 文件对应的 pdb 文件放在同一目录中 但是在检查模块时 我发现每个 DLL 文件都被签名为Cannot find or open the PDB fi
  • 如何获取运行或段落的高度

    我找到了Run or Paragraph in FlowDocument现在我需要知道HEIGHT of it i e while navigator CompareTo flowDocViewer Document ContentEnd
  • 实现“LazyProperty”类 - 这是一个好主意吗?

    我经常发现自己编写的属性是惰性评估的 就像是 if backingField null backingField SomeOperation return backingField 代码不多 但如果您有很多属性 它确实会重复很多次 我正在考
  • 如何阻止“gem”实用程序访问我的主目录?

    当我跑步时 gem install
  • 如何让 Internet Explorer 正确处理自定义协议处理程序?

    我想要打开我正在开发的网站PuTTY on ssh 0 0 0 0输入网址 我在 Chrome 和 Firefox 中使用了此功能 但在 Internet Explorer 中出现以下错误 Windows cannot access the
  • 获取局部变量

    当从已部署的应用程序获取堆栈跟踪作为错误报告时 获取实际变量值以重建抛出异常之前的系统状态也会很有帮助 类似的事情在 Java 中可行吗 如何才能做到这一点 干杯 最大限度 我很确定您无法获取堆栈跟踪中的局部变量 因为输出是从 StackT
  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚
  • 从嵌套 ToolStripMenuItem 检索时,ContextMenuStrip.Owner 属性为 null

    我有一个ContextMenuStrip设置有两个ToolStripItem是 第二ToolStripItem有两个额外的嵌套ToolStripItems 我将其定义为 ContextMenuStrip cms new ContextMen
  • 从 DataGridViewSelectedRowCollection 复制列详细信息

    我有一个 DataGridView 它绑定到一个由设计时未知的 SQL 查询返回的 DataSet 好吧 我知道查询是什么 我只是不知道用户选择了哪一个 我允许用户从表中选择一组行并单击 确定 按钮 然后我想将这些行复制到新的 DataGr
  • C++/Windows:如何报告内存不足异常(bad_alloc)?

    我目前正在为 Windows MSVC 9 0 应用程序开发基于异常的错误报告系统 即异常结构和类型 继承 调用堆栈 错误报告和日志记录等 我现在的问题是 如何正确报告和记录内存不足错误 当发生此错误时 例如作为bad alloc抛出的ne
  • TCHAR 仍然相关吗?

    我是 Windows 编程新手 在读完 Petzold 的书后 我想知道 使用TCHAR类型和 T 函数来声明字符串或者我应该使用wchar t and L 新代码中的字符串 我将仅针对现代 Windows 截至撰写本文时版本 10 和 1
  • 正则表达式获取模式的最后一次出现

    我有一个字符串 我需要选择最后一次出现的模式 该字符串是 1302638400000 0 0 1302724800000 0 610 64999999999998 1302811200000 0 2266 6500000000001 130
  • 从 Microsoft Chart Control 单击数据标记获取鼠标单击事件

    我的应用程序中有一个 net 4 0 点图 我想捕获鼠标在数据标记上的点击 当用户单击特定点时 我想转到绑定表中数据来自的行 此功能是否内置于 net 图表控件中 编辑 我发现我可能实际上想要光标位置值 而不是要求用户单击特定的数据点 一旦
  • 如何使用批处理文件创建 EXE 可执行文件? [复制]

    这个问题在这里已经有答案了 我希望能够简单地运行 Windows 批处理文件并让它创建 exe 可执行文件 我知道您可以使用以下脚本批量创建文件 echo off echo This will be in a text file gt gt
  • 从共享网络文件夹运行的 .NET 应用程序的性能损失

    从共享网络文件夹运行 NET 4 0 应用程序是否有任何性能损失 我发现哪个应用程序启动速度较慢 但 在使用时没有注意到任何变慢 但不确定 当通过网络运行可执行文件时 Windows 不会在应用程序启动时通过网络传输整个应用程序 这样做是为

随机推荐

  • Python 基础知识 为什么 set() 有效但 {} 失败? [复制]

    这个问题在这里已经有答案了 s this that this 为什么set s 工作但是 s 失败了 TypeError unhashable type list 这是因为它们意味着不同的东西 set s 迭代s创建一个集合 而文字语法 s
  • 如何定期使用 PAPI 进行性能测量

    我想使用 C 中的 PAPI api 分析我的应用程序的系统性能 一般结构是 初始化PAPI 初始化感兴趣的计数器 启动计数器 运行应用程序的主要逻辑 结束计数器并读取值 我想定期读取计数器 例如每 1 秒一次 而不是在应用程序结束时读取最
  • OData 筛选器和 Guid 字段的问题

    我正在尝试使用 OData 来运行一些代码 下面的代码似乎不起作用 ds是 OpenDataServiceProxy 适配器类型 ID是 Guid 的字符串表示形式 适配器名称是一个字符串名称 ds query DataAdapters f
  • 如何解决 Node.js 错误:找不到模块?

    当我启动一个 dockerized Node js 测试应用程序时 sudo docker compose up 我收到以下错误 Starting testapp web 1 done Attaching to testapp web 1
  • AWS S3分段上传在不指定源文件时工作

    我已经构建了一个 ajax 上传器 可以将文件直接上传到 S3 它运行完美 但我感到困惑的是它实际上是如何工作的 我对文档中的显示方式采取了不同的方法 不是指定 sourceFile 而是在元数据中指定文件名 没有发送文件位置 我在用着AW
  • Laravel 和 LocalStack 的最大执行时间

    我正在尝试使用 Localstack 来模拟 s3 实例 以便我可以从表单上传图像 这是我的 docker compose localstack image localstack localstack latest container na
  • 如何使用 Ruby/Rails 从网站获取内容?

    我想使用 ruby rails 从网站复制一些特定内容 我需要的内容位于一个 marquee html 标签内 由 div 分隔 我如何使用 ruby 访问此内容 更准确地说 我想使用某种 ruby gui 最好是鞋子 我该怎么做 这并不是
  • 如何定义依赖于Provider的GoRouter?

    我正在将 GoRouter 集成到我的 Flutter 应用程序中 我已经在使用 Riverpod 我有一个isAuthorizedProvider定义如下 final isAuthorizedProvider Provider
  • 使用 UIPageViewController 在多个视图控制器之间滑动

    我的 UIPageViewController 根本不工作 我想做的是在 UIPageViewController 内切换 2 个视图控制器 我已经遵循这里的指南但失败了 将 UIPageViewController 与 swift 和多个
  • Matplotlib - 堆积条形图和工具提示

    This code https github com joferkington mpldatacursor issues 47当鼠标悬停在条形图上时返回工具提示 我想修改堆叠条形图的代码 并在鼠标悬停在条形图的部分时获取该部分的特定工具提示
  • 如何填写BabeLua设置?

    我希望能够在 Visual Studio 2013 Ultimate 中对 LUA 进行编程 我有 BabeLua 来尝试做到这一点 在该程序中有一个名为 设置 的选项卡 该选项卡中有 5 个我不明白的文本框 LUA 脚本文件夹 存储文件的
  • 无服务器框架的最大策略大小错误

    部署大型无服务器应用程序时 我们首先达到了 200 个资源的上限 我们使用serverless plugin split stacks库解决了这个问题 但后来可能引入了另一个问题 发生错误 IamRoleLambdaExecution 最大
  • 如何在 iOS 设备上构建视差滚动

    今天我看到了最令人惊叹的 ipad 应用程序 我确信它是使用 html5 css3 和 javascript 编写的 应用程序最好的部分是他们完美地创建了视差滚动 我的问题是 如何实现 我找不到任何关于在 iOS 设备上创建视差滚动的文档
  • 使用字符串作为列名时如何使用 dplyr::arrange(desc()) ?

    我该如何使用dplyr arrange dplyr desc 并传入一个字符串作为列名 这是一个示例数据集 df lt data frame a 1 3 b 3 1 有效的例子 df gt dplyr arrange b df gt dpl
  • 如何使用 rspec 为 ApplicationCable::Connection 测试存根 env['warden'].user

    轨道 5 2 我有以下 ApplicationCable Connection ruby 文件 module ApplicationCable class Connection lt ActionCable Connection Base
  • 从 SafariNavigateEvent 获取 URL 和页面标题数据

    我正在为一位正在度假的同事调试一些东西 他对 Safari 扩展开发知之甚少 我有一个 Safari 扩展程序 可以监听 open beforeNavigate navigate 和 activate 事件 当这些事件中的任何一个被触发时
  • 正则表达式获取两个字符之间的所有内容[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要获取符号 和 之间的内容 即使还有其他相同的字符 我需要在第一个 和最后一个 之间获取内容 在 jquery 中使用正则表达式 提前
  • 空类是否可以在没有初始化器或显式默认构造函数的情况下用作 constexpr 变量?

    给出以下代码 struct f int main constexpr f f1 const f f1 This also has the same issue constexpr f f1 This works clang 和 gcc 对于
  • PHP - 限制 cron 作业与集群()重叠

    我有一个 php 脚本 可以处理并创建大量图像 使用 cron 作业每 5 分钟运行一次 我希望能够对此进行限制 以便它一次只能运行一次 并且如果每次运行时间超过 5 分钟 则不会重叠 flock 似乎是实现这一目标的最佳方法 但我很难理解
  • Windbg可以显示线程名称吗?

    Windbg应该明白 https groups google com forum topic microsoft public windbg 2atvu7h3D3c the MS异常协议 https msdn microsoft com e