问题标签 [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.
windbg - 在WinDbg中显示共享内存部分的内容?
我有几个使用命名内存部分进行通信的程序。有什么方法可以在用户模式或内核模式下从 WinDBG 查看此共享内存部分的内容?我没有指向它的指针,但我知道它的名字。
debugging - 如何最好地在 WinDBG 崩溃脚本中为可执行名称命名?
背景资料
为了保存故障转储,我在注册表项cdb.exe
的Debugger
值中传递了一个脚本: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 调用的函数。
问题
有谁知道或有命令将图像的名称作为别名用于在这些情况下仍然有效的文件名?
windbg - 如何使用 windbg 从挂起转储中找到句柄所有者?
如何在windbg中找出哪个线程是我的事件句柄的所有者:
我在跑
并得到
回来,因为没有名字我还没想出如何让所有者证明我的线程正在等待哪个线程
[编辑] 我必须处理转储,因为需要在用户机器上重新启动原始进程,因此无法调试实时会话
到目前为止我发现的关于这个主题的最佳讨论是在这个博客上,但不幸的是我们最终使用了不同的锁定方法(我最终使用了 WaitForMultipleObjectsEx,描述是针对 WaitForSingleObject),而且他似乎可以访问实时进程
我的线程的堆栈跟踪(在某事上被阻塞并且我正在寻找当前所有者的线程)是:
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 上调试..
debugging - IDebugSymbols::GetNameByOffset 和重载函数
我正在使用IDebugSymbols::GetNameByOffset并且我发现对于重载相同名称的不同函数,我得到了相同的符号名称。
例如,我正在查找符号的代码可能如下:
在运行时,当我从每个函数中获得指令的地址时,我想使用GetNameByOffset
并以某种方式将两者区分开来。我已经尝试调用SetSymbolOptions 来切换此处SYMOPT_UNDNAME
记录的和SYMOPT_NO_CPP
标志,但这不起作用。
有谁知道如何在调试器引擎世界中区分这些符号?
编辑:请参阅我对已接受答案的评论,以对提议的解决方案进行小幅修改。
.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.
.net - WinDbg -- TraceListener 和饱和线程池
我有一个间歇性挂起的多线程 .NET Windows 服务——可能每两周 24/7 运行一次。当挂起发生时,线程池完全饱和,因为对我们自定义跟踪侦听器的调用由于某种原因开始阻塞。根据windbg,违规代码中没有任何锁,也没有任何阻塞,但它们肯定在某个地方阻塞。堆栈上也没有任何异常。在 BufferedStream.Write 代码中偶尔会遇到一个 Thread.Sleep(1),但我的问题是 ReOpenMetaDataWithMemory、CreateApplicationContext 和 DllCanUnloadNow 是什么意思?
ThreadPool 上几乎所有 2000 个挂起的工作线程(不是正常操作!)都有一个类似于以下的堆栈:
c# - WinDbg 和 Visual Studio Express 版本
WinDbg 可以和Visual C# 2008 Express Edition一起使用吗?
windbg - 将 !dumpheap (windbg) 输出限制为 n 个对象
当使用 windbg 并运行 !dumpheap 命令查看对象的地址时,如何限制特定数量的对象。我发现的唯一方法是在博客http://dotnetdebug.net /2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system 上使用 CTRL+BREAK 和命令行/
-l X - 仅打印每个堆中的 X 个项目,而不是所有对象。
显然 -l 在 SOS.dll 中不再存在
debugging - 调试 .NET CLR 应用程序时,如何查看评估堆栈上的局部变量?
我正在使用 Windbg(带有 sos 扩展名)并尝试调试崩溃的应用程序。我能够转储引发异常的调用的 IL,并且通过检查代码,如果我可以转储评估堆栈的内容,我似乎可以获得所需的信息。可以用 WinDbg & sos 做什么吗?
这是我所做的:
- 启动 WinDbg
- 附加到崩溃的进程
- loadby sos mscorwks (加载 sos 扩展)
!token2ee theModuleName 0600009a (其中theModuleName是我正在调试的应用程序(和程序集)的名称,9a是 Windows 错误报告工具报告的崩溃方法的方法偏移量。我得到了这个输出:
模块:000e2c3c (theApplicationName.exe)
令牌:0x0600009a
MethodDesc:000e67c8
名称:MyNamespace.MyClassName.theCulpritFn(MyOtherClass)
JITTED 代码地址:0081b1d0!dumpil 00e67c8 (它为所讨论的方法转储了 IL)。这是输出:
问题是:有没有办法让我看到在抛出异常之前压入堆栈的内容。如果我没记错的话,传递给异常构造函数的参数应该是评估堆栈上索引 0 处的局部变量。
PS 当我尝试调用!clrstack -a时,我收到一条消息:无法遍历托管堆栈。当前线程可能不是托管线程。您可以运行 !threads 以获取进程中的托管线程列表。
谢谢!