草庐IT

windows - 在 windbg 中的 COM 类方法上设置断点

是否有某种方法,类似于“bmModule!Symbol”,可以在windbg中的COM类的特定方法上设置断点?看起来COMDLL只导出四个符号(DllCanUnloadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer),因此通常的“bm”方法不起作用。我假设还有其他方法可以做到这一点,但在过去一个小时左右我一直没能找到它。 最佳答案 您应该可以使用bu(Unresolved断点)。我相信语法如下,但我的内存可能生锈了:buMyDll!MyClass::MyMeth

windows - 我应该对 pdb 行号给予多少信任?

我目前正在从转储中调试Windbg中的一个问题。我有正确的pdbs,我可以很高兴地查看本地人等。但是,我拥有的源代码(我从VCS分支中提取的,据称是该版本的源代码)在我正在查看的堆栈的某些部分中似乎有几行偏离。我以前见过它关闭1行的实例,但不是3/4行。这是什么原因造成的?有什么明确的方法可以检查我是否拥有正确的源文件? 最佳答案 您查看的是发布代码的调试版本还是非优化版本?代码优化可能会导致您看到的换行,因此您应该使用/Od重新编译C++优化设置为“已禁用”,看看这是否能纠正您所看到的。WinDbg使用与VisualStudio相

c - 为什么 PsGetCurrentProcessId() 返回 null?

我遇到了一个奇怪的问题:在“系统”进程的一个线程中,我调用了PsGetCurrentProcessId(),但得到了一个空值。此外,我检查了线程的_CLIENT_ID,发现UniqueProcess和UniqueThread都是null。我还检查了当前进程,即'system'进程,发现它的UniqueProcessId为4,这是正常的。为什么? 最佳答案 系统进程ID是一个非常好的“hack”,因此多个工具(例如ProcExp、windbg)不必处理特殊情况的仅内核线程或空闲函数调度程序。如果你是一个只有内核的线程,你就没有关联的进

windows - 使用 1394 连接调试 Windows XP 内核

主机:Windows7x64guest:WindowsXPSP3x86我在两端都有2个PCI火线卡(SIIG1394安装为德州仪器OHCI兼容IEEE1394主机Controller)。在WindowsXP上,我在boot.ini中添加了以下内容:/debug/debugport=1394/channel=10我重新启动了WindowsXP,OHCI驱动程序变成了黄色(这是预料之中的)。在Windows7(主机)上,我运行WinDBG(x86),打开内核调试,1394,指定channel10并运行它说:Using1394fordebuggingChecking1394debugdriv

windows - 如何在不使用 GUI 的情况下在 windbg 中的暂停指令后获取堆栈跟踪?

通常我在我的C++代码中插入一个assert(0);,启动Windbg,按F5,输入k然后我得到一个堆栈跟踪。然后我必须通过鼠标复制粘贴它并退出。但我想将其自动化。有什么方法可以检索堆栈跟踪并将其写入文本文件而无需手动使用GUI? 最佳答案 首先,您可以像这样使用.logopen将gui的输出写入文本文件.logopenc:\dump\myLog.txt这会将所有内容转储到此位置,调用.logclose以在一行中关闭日志:.logopenc:\dump\myLog.txt;k;.logclose其次,如果你真的不想使用gui,还有命

windows - 使用两个 VirtualBox 主机调试 Windows 内核

我正在运行Linux,并且在VirtualBox中安装了两台Windows7机器。现在我正在尝试使用第一台机器调试第二台机器。所以我为两台机器配置了相同的宿主管道,在调试器机器中,我启动了等待COM1上的输入的windbg:在被调试机器上,我启用Debug模式并重启,C:\Users\XX>bcdedit/dbgsettingsdebugtypeSerialdebugport1baudrate115200但他们好像并不认识,只是一味的等待。有什么问题吗?还是根本不可能实现。 最佳答案 在其中一个虚拟机上取消选中“创建管道”(最佳实践

windows - 线程命令在 WInDbg 中不起作用

尝试在WinDbg中执行基于线程的命令。安装程序是具有XP的VMWare,主机是Win7。基于this,试图调试应用程序挂起。但是无法从中获取任何信息。对于简单的tilda(~)它给出了语法错误。我需要做一些不同的设置才能执行这些命令吗?无论如何,这些“特殊”吗?因为我可以使用其他命令。基本上我希望WinDbg让我监控线程的状态?例如等待响应、发送请求或类似的事情。 最佳答案 ~仅为用户模式调试更改线程上下文。对于krnelmkode调试,请参阅帮助:。线。过程!线!过程 关于windo

windows - 无法使用选项上的 bcdedit/debug 启动 Windows 7(32 位)

我正在阅读有关Windows内部结构的书籍和文章。我想在Windows7(32位)机器的WinDBG中启动内核调试器。我尝试通过设置bcdedit/debug/on启用机器进行调试。重启机器后,它只是挂起。然后在安全模式下关闭bcdedit/debug/off,使我的机器正常工作。我在互联网上搜索了原因,并按照其中一篇文章中的建议停止了Skype,该文章称这是挂起的原因之一。做所有这些仍然不能使我的机器在Debug模式下工作。谁可以帮我这个事?令人沮丧的是,我有书籍和视频,其中他们以如此简单的方式进行内核调试,而我正在努力启动调试器:) 最佳答案

c++ - 为什么堆的数量总是1?

我正在使用WinDbg查看进程中的堆数,方法是dt_PEB@$peb。我得到以下信息,+0x088NumberOfHeaps:1现在根据AdvancedWindowsDebugging一书,Mostapplicationsimplicitlyusecomponentsthatcreatetheirownheaps.AgreatexampleistheCruntime,whichcreatesitsownheapduringinitialization.我在main处添加了断点,但我仍然可以看到只有一个堆在处理中。其次,我运行了以下代码,堆的数量仍然是1。BYTE*pAlloc1=NUL

.net - 无法在 windbg 中调试 .net 转储

我收到一份WER报告,说我们的.net应用程序在某台机器上崩溃了,我得到了崩溃的转储文件,但我尝试了很多方法,阅读了很多关于调试.net崩溃的文章,但仍然没有运气,我什至无法运行sos.dll提供的扩展命令,我总是收到以下消息“找不到运行时DLL(clr.dll),0x80004005扩展命令需要clr.dll才能执行某些操作。”我想知道如何知道那台机器上的.net框架版本?因为非扩展命令可以工作!!请帮忙!!当我使用“lm”命令列出所有加载的模块时,我没有在模块列表中找到“clr”或“clrjit”模块,这是否意味着我的应用程序在崩溃之前实际上没有运行,可以我说机器上的.net框架坏