如何使用 windbg 检查堆转储中静态 thread_local 变量的内容?
How can I inspect the contents of a static thread_local variable on a heap dump with windbg?
给定以下源代码:
namespace EventThreadLocal {
static thread_local std::unique_ptr<std::vector<EventInfo>> Stack;
static const EventInfo* Top()
{
auto stack = Stack.get();
if (!stack)
return nullptr;
if (stack->empty())
return nullptr;
return &(stack->back());
}
}
如何检查堆转储中静态 thread_local 变量 Stack 的内容?
我的理解是命令 !tls 显示线程本地存储槽,但我怎么知道这个变量使用的适当槽索引?
您不需要知道与 static thread_local
变量关联的 TLS 插槽,调试器已经使用 x
命令解决了该问题。请参阅下面的示例输出,x
将 Stack
解析为 WinDbg 中不同线程的不同地址。
0:000> x test_exe!Stack
00000296`a5437410 test_exe!Stack = empty
0:000>~1s
0:001> x test_exe!stack
00000296`a543e230 test_exe!Stack = empty
给定以下源代码:
namespace EventThreadLocal {
static thread_local std::unique_ptr<std::vector<EventInfo>> Stack;
static const EventInfo* Top()
{
auto stack = Stack.get();
if (!stack)
return nullptr;
if (stack->empty())
return nullptr;
return &(stack->back());
}
}
如何检查堆转储中静态 thread_local 变量 Stack 的内容?
我的理解是命令 !tls 显示线程本地存储槽,但我怎么知道这个变量使用的适当槽索引?
您不需要知道与 static thread_local
变量关联的 TLS 插槽,调试器已经使用 x
命令解决了该问题。请参阅下面的示例输出,x
将 Stack
解析为 WinDbg 中不同线程的不同地址。
0:000> x test_exe!Stack
00000296`a5437410 test_exe!Stack = empty
0:000>~1s
0:001> x test_exe!stack
00000296`a543e230 test_exe!Stack = empty