问题标签 [windbg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1897 浏览

windbg - 在WinDbg中显示共享内存部分的内容?

我有几个使用命名内存部分进行通信的程序。有什么方法可以在用户模式或内核模式下从 WinDBG 查看此共享内存部分的内容?我没有指向它的指针,但我知道它的名字。

0 投票
3 回答
1364 浏览

debugging - 如何最好地在 WinDBG 崩溃脚本中为可执行名称命名?

背景资料

为了保存故障转储,我在注册表项cdb.exeDebugger值中传递了一个脚本:AeDebug

这是脚本的第一部分:

问题

使用符号,这完全符合我的意愿,我得到具有合理名称的日志文件,例如:

  • LHCBDRDT.exe_process_147c_2009-01-06_23-10-05-371.log

但是,如果符号不可用,我会得到一个这样的日志文件名:

  • ${CrashFirstModule}_process_17a8_2009-01-06_23-10-01-124.log

这是因为 alias 命令设置别名失败。别名命令是我从DumpAnalysis.org 获得的。此命令从图像的 PEB 标头中提取名称,使用ntdll.dll. 没有操作系统的符号,它不知道在哪里可以找到它从 ntdll.dll 调用的函数。

问题

有谁知道或有命令将图像的名称作为别名用于在这些情况下仍然有效的文件名?

0 投票
4 回答
21189 浏览

windbg - 如何使用 windbg 从挂起转储中找到句柄所有者?

如何在windbg中找出哪个线程是我的事件句柄的所有者:

我在跑

并得到

回来,因为没有名字我还没想出如何让所有者证明我的线程正在等待哪个线程

[编辑] 我必须处理转储,因为需要在用户机器上重新启动原始进程,因此无法调试实时会话

到目前为止我发现的关于这个主题的最佳讨论是在这个博客上,但不幸的是我们最终使用了不同的锁定方法(我最终使用了 WaitForMultipleObjectsEx,描述是针对 WaitForSingleObject),而且他似乎可以访问实时进程

我的线程的堆栈跟踪(在某事上被阻塞并且我正在寻找当前所有者的线程)是:

0 投票
5 回答
61953 浏览

debugging - WinDbg 符号解析

使用 WinDbg 时,私有符号文件 (pdb?) 应该放在哪里?

我的情况是:我有一个要调试的 DLL。我有这个 DLL 的源代码和符号文件。此 DLL 由另一个 DLL(我没有符号或源代码)调用,而另一个 DLL 又由 EXE 调用(我也没有符号或源代码)。

我的问题是我收到一条警告,上面写着

*** 警告:无法验证C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll的校验和

我认为这个警告是我在调用堆栈中收到以下类型消息的原因:

MyDll!AClass::AFunction+SomeHexAddress

我的文件结构如下所示:

exe:C:\TheProgram\program.exe

调用 dll:C\TheProgram\SomeSubfolder\caller.???

我要调试的 DLL:C:\TheProgram\SomeSubfolder\AnotherSubfolder\MyDll.dll

注意:我在与 exe 不同的驱动器上的工作区中将符号文件路径和源文件路径设置为生成调试 DLL 的位置。但我确实复制了 pdb + 映射文件并将其放在我想要的 dll 上调试..

0 投票
1 回答
594 浏览

debugging - IDebugSymbols::GetNameByOffset 和重载函数

我正在使用IDebugSymbols::GetNameByOffset并且我发现对于重载相同名称的不同函数,我得到了相同的符号名称。

例如,我正在查找符号的代码可能如下:

在运行时,当我从每个函数中获得指令的地址时,我想使用GetNameByOffset并以某种方式将两者区分开来。我已经尝试调用SetSymbolOptions 来切换此处SYMOPT_UNDNAME记录的和SYMOPT_NO_CPP标志,但这不起作用。

有谁知道如何在调试器引擎世界中区分这些符号?


编辑:请参阅我对已接受答案的评论,以对提议的解决方案进行小幅修改。

0 投票
1 回答
396 浏览

.net - RedirectedThreadFrame in Callstack

Has anyone seen a RedirectedThreadFrame in a callstack in windbg? That is from the managed callstack. I am seeing alot of exceptions being thrown inside the framework that I am never seeing bubbled to me and I am trying to figure out why. The native callstack just has:

0526f6b0 79f63d27 KERNEL32!RaiseException+0x53 0526f718 79f64102 mscorwks!Thread::RedirectedHandledJITCase+0x198 0526f720 00000000 mscorwks!Thread::RedirectedHandledJITCaseForGCThreadControl+0x7

The managed callstack has:

0526f6dc 7c812aeb [RedirectedThreadFrame: 0526f6dc] 0526f724 00c741b9 Library.Class.b__3(MyObject) 0526f7cc 00c73c85 ParallelProcessingLibrary.ActionController`1[[System.__Canon, mscorlib]].ExecutePartition(System.Object) 0526f840 79a00eee System.Threading.ThreadHelper.ThreadStart_Context(System.Object) 0526f84c 792e019f System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) 0526f864 797db48a System.Threading.ThreadHelper.ThreadStart(System.Object) 0526fa8c 79e71b4c [GCFrame: 0526fa8c]

I have been unable to turn up any information as to what this means. Any explanations would be appreciated.

0 投票
4 回答
2043 浏览

.net - WinDbg -- TraceListener 和饱和线程池

我有一个间歇性挂起的多线程 .NET Windows 服务——可能每两周 24/7 运行一次。当挂起发生时,线程池完全饱和,因为对我们自定义跟踪侦听器的调用由于某种原因开始阻塞。根据windbg,违规代码中没有任何锁,也没有任何阻塞,但它们肯定在某个地方阻塞。堆栈上也没有任何异常。在 BufferedStream.Write 代码中偶尔会遇到一个 Thread.Sleep(1),但我的问题是 ReOpenMetaDataWithMemory、CreateApplicationContext 和 DllCanUnloadNow 是什么意思?

ThreadPool 上几乎所有 2000 个挂起的工作线程(不是正常操作!)都有一个类似于以下的堆栈:

0 投票
2 回答
418 浏览

c# - WinDbg 和 Visual Studio Express 版本

WinDbg 可以和Visual C# 2008 Express Edition一起使用吗?

0 投票
2 回答
14038 浏览

windbg - 将 !dumpheap (windbg) 输出限制为 n 个对象

当使用 windbg 并运行 !dumpheap 命令查看对象的地址时,如何限制特定数量的对象。我发现的唯一方法是在博客http://dotnetdebug.ne​​t /2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system 上使用 CTRL+BREAK 和命令行/

-l X - 仅打印每个堆中的 X 个项目,而不是所有对象。

显然 -l 在 SOS.dll 中不再存在

0 投票
2 回答
9209 浏览

debugging - 调试 .NET CLR 应用程序时,如何查看评估堆栈上的局部变量?

我正在使用 Windbg(带有 sos 扩展名)并尝试调试崩溃的应用程序。我能够转储引发异常的调用的 IL,并且通过检查代码,如果我可以转储评估堆栈的内容,我似乎可以获得所需的信息。可以用 WinDbg & sos 做什么吗?

这是我所做的:

  1. 启动 WinDbg
  2. 附加到崩溃的进程
  3. loadby sos mscorwks (加载 sos 扩展)
  4. !token2ee theModuleName 0600009a (其中theModuleName是我正在调试的应用程序(和程序集)的名称,9a是 Windows 错误报告工具报告的崩溃方法的方法偏移量。我得到了这个输出:

    模块:000e2c3c (theApplicationName.exe)
    令牌:0x0600009a
    MethodDesc:000e67c8
    名称:MyNamespace.MyClassName.theCulpritFn(MyOtherClass)
    JITTED 代码地址:0081b1d0

  5. !dumpil 00e67c8 (它为所讨论的方法转储了 IL)。这是输出:

    问题是:有没有办法让我看到在抛出异常之前压入堆栈的内容。如果我没记错的话,传递给异常构造函数的参数应该是评估堆栈上索引 0 处的局部变量。

    PS 当我尝试调用!clrstack -a时,我收到一条消息:无法遍历托管堆栈。当前线程可能不是托管线程。您可以运行 !threads 以获取进程中的托管线程列表。

谢谢!