Windows10系统之家 - 安全纯净无插件系统之家win10专业版下载安装
时间:2023-11-29 14:27:50 来源:Windows10之家 作者:admin
Windbg是一款蓝屏分析修复工具软件,是用来分析下蓝屏出现的原因,它通过对dmp文件分析、定位能快速帮你找到蓝屏问题并修复。使用Windbg蓝屏分析修复工具不一定保证能找到真正蓝屏的问题,只是辅助查找分析,由于电脑蓝屏关联比较多,所以还需要借助一些资料来推理。
答:
windbg调试命令使用详解:
程序执行到一个语句之前暂停下来的地方,断点对于软件调试来说是非常重要的,这一篇主要介绍使用windbg调试软件时,如何加断点。 windbg命令 bp+address/符号地址 在address指令处加断点,但是这个地址所在的模块必须已经被加载 bu+address/符号地址 在address指令处加断点,但是这个地址所在的模块可以没有被加载,即延迟加载的模块。 ba: 内存访问断点,当访问这个内存地址时(一般是数据),程序会断住。 bl: 列出所有已经加载的断点和地址 bc: 清理断点。 bc *,清理所有的断点。 bc 1,清理1号断点。 bd: 使一个断点无效。 be: 使一个断点有效,与bd左右相反。
断点是认为加上的,程序执行到一个语句之前暂停下来的地方,断点对于软件调试来说是非常重要的,这一篇主要介绍使用windbg调试软件时,如何加断点。 windbg命令 bp+address/符号地址 在address指令处加断点,但是这个地址所在的模块必须已经被加载 bu+address/符号地址 在address指令处加断点,但是这个地址所在的模块可以没有被加载,即延迟加载的模块。 ba: 内存访问断点,当访问这个内存地址时(一般是数据),程序会断住。 bl: 列出所有已经加载的断点和地址 bc: 清理断点。 bc *,清理所有的断点。 bc 1,清理1号断点。 bd: 使一个断点无效。 be: 使一个断点有效,与bd左右相反。
调试Dump文件很简单,双击自动打开VC然后F7运行。
但是中间要注意很多事情。
1。Dump文件放在哪里
Dump文件不用非要放在你编译出来的位置,你完全可以建立一个新的文件夹来放它。
2。要恢复当时的现场
可能你要问,怎么可能,这个dump文件可是用户发给我的,我不可能去用户家里调试吧?
这个恢复现场可不是指的非要到那台机器上去,而是要把产生dump文件对应的二进制文件拿到。
但是恢复现场需要所有的二进制文件都要对应,你一定要有导致用户崩溃的那些Exe和Dll。既然是你发布的程序,Exe文件当然你会有。所以这里只考虑Dll就行了。
Dump文件中记录了所有dll文件的版本号和时间戳,所以你一定可以同过某种途径拿到它。如果你能从用户那里拿到最好,如果不方便,用户不可能用的是我们平常不常用的操作系统,所以找个有对应系统的机器一般都会有。但是记住不光是文件名称要一致,还要核对版本和时间戳,如果不同一样没有办法用。
因为使用WinDbg时( x64)启动内核调试,Windows调试驱动程序(1394kdbg.sys)驱动程序无法安装。 请注意,我正在通过选择"以管理员身份运行"来执行WinDbg。
右击“计算机”-“属性”-“高级系统设置”-“高级”-“启动和故障恢复”设置 2.提取蓝屏文件"C:\WINDOWS\Minidump\"dump文件及"C:\WINDOWS\"MEMERY.DUMP 3.下载安装windbg 4.启动"windbg"-点击"File"-"OpenCrashDump"-选择dump文件 5.找到"probablycausedby"字样确定罪魁祸首 6.一些信息DEFAULT_BUCKET_ID:DRIVER_FAULT//指出错误类型,这里是驱动错误 BUGCHECK_STR:0xD1//bugcheck索引,可查windbg文档,也可"!analyze?showD1" PROCESS_NAME:NotMyfault.exe//错误所属进程 附:windbg基本调试命令: r可以显示系统崩溃时的寄存器,和最后的命令状态。 dd显示当前内存地址,dd参数:显示参数处的内存。 u可以显示反汇编的指令 !analyze-v显示分析的详细信息。.bugcheck可以显示出错的代码
先要看是哪个驱动导致的,在Windows目录下有一个minidump文件夹,找到最后一次的. dmp文件,用WinDbg打开看看,Windbg在微软网站上可以下载
Windbg生成dump文件的方法:
程序崩溃(crash)的时候, 为了以后能够调试分析问题, 可以使用WinDBG要把当时程序内存空间数据都保存下来,生成的文件称为dump 文件。 步骤:
1) 打开WinDBG并将之Attach 到crash的程序进程
2) 输入产生dump 文件的命令
WinDBG产生dump 文件的命令是 .dump ,可以选择不同的参数来生成不同类型的dump文件。
选项(1): /m
命令行示例:.dump /m C:\dumps\myapp.dmp
注解: 缺省选项,生成标准的minidump, 转储文件通常较小,便于在网络上通过邮件或其他方式传输。 这种文件的信息量较少,只包含系统信息、加载的模块(DLL)信息、 进程信息和线程信息。
选项(2): /ma
命令行示例:.dump /ma C:\dumps\myapp.dmp
注解: 带有尽量多选项的minidump(包括完整的内存内容、句柄、未加载的模块,等等),文件很大,但如果条件允许(本机调试,局域网环境), 推荐使用这中dump。
选项(3):/mFhutwd
命令行示例:.dump /mFhutwd C:\dumps\myapp.dmp
注解:带有数据段、非共享的读/写内存页和其他有用的信息的minidump。包含了通过minidump能够得到的最多的信息。是一种折中方案
那怎么自动生成dump文件呢,比如对方的电脑没有windbg,这里用到一个window系统自带工具,Dr.Watson
运行方式很简单:
直接run-输入drwtsn32 -i就可以了,会提示这样的:
这个命令真难记,实话,记华生医生吧,福尔摩斯中的
如果有程序崩溃,会自动生成dump,这时再输入drwtsn32就会运行这个程序:
找到对应路径的DMP文件就行了,一般放在如下路径:
C:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson
以下实例来自AWD
代码:
Copyright (c) Advanced Windows Debugging (ISBN 0321374460) from Addison-Wesley Professional. All rights reserved.
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE.
--*/
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
VOID SimulateMemoryCorruption ( ) ;
class CAppInfo
{
public:
CAppInfo(LPWSTR wszAppName, LPWSTR wszVersion)
{
m_wszAppName=wszAppName;
m_wszVersion=wszVersion;
}
VOID PrintAppInfo()
{
wprintf(L"\nFull application Name: %s\n", m_wszAppName);
wprintf(L"Version: %s\n", m_wszVersion);
}
private:
LPWSTR m_wszAppName ;
LPWSTR m_wszVersion ;
} ;
CAppInfo* g_AppInfo ;
int __cdecl wmain (int argc, WCHAR* args[])
{
wint_t iChar = 0 ;
g_AppInfo = new CAppInfo(L"Memory Corruption Sample", L"1.0" );
if(!g_AppInfo)
{
return 1;
}
wprintf(L"Press: \n");
wprintf(L" 1 To display application information\n");
wprintf(L" 2 To simulated memory corruption\n");
wprintf(L" 3 To exit\n\n\n>");
while((iChar=_getwche())!='3')
{
switch(iChar)
{
case '1':
g_AppInfo->PrintAppInfo();
break;
case '2':
SimulateMemoryCorruption();
wprintf(L"\nMemory Corruption completed\n");
break;
default:
wprintf(L"\nInvalid option\n");
}
wprintf(L"\n\n> ");
}
return 0;
}
VOID SimulateMemoryCorruption ( )
{
char* pszWrite="Corrupt";
BYTE* p=(BYTE*) g_AppInfo;
CopyMemory(p, pszWrite, strlen(pszWrite));
}
ntoskrnl.exe是xp内核。
他不可能有问题的。肯定是其它的软件或驱动出问题了。最简单的解决办法是重装系统。5分钟的事情。如果持续蓝。说明硬件有问题。相关文章
热门教程
热门系统下载
热门资讯