上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 19 下一页

2019年12月14日

关于Visual Studio源代码文件的行尾

摘要: 我们都知道,UNIX只使用换行符(linefeed)来结束每一行,而DOS传统上使用CR+LF来结束每一行,Visual Studio应该完全在DOS世界中,但不管出于什么原因,当我们从代码服务器上获取代码后,我有时收到以下消息: 如果文件是从某个外部项目导入的,这是可以理解的,但是这个文件是由Vi 阅读全文

posted @ 2019-12-14 10:28 活着的虫子 阅读(777) 评论(1) 推荐(0) 编辑

2019年12月13日

异常DBG_PRINTEXCEPTION_C(0x40010006)和DBG_PRINTEXCEPTION_WIDE_C(0x4001000A)

摘要: 简介 DBG_PRINTEXCEPTION_C,代码0x40010006;DBG_PRINTEXCEPTION_WIDE_C,代码0x4001000A;在调试器的控制台窗口打印异常信息/调试信息。它定义在 ntstatus.h头文件里,如下: //// MessageId: DBG_PRINTEXC 阅读全文

posted @ 2019-12-13 18:48 活着的虫子 阅读(1429) 评论(0) 推荐(0) 编辑

研究下vc++的abort函数

摘要: 最近在调试几个问题时,发现跟abort函数有关,以前只是简单使用,现在却发现不简单,就多留意了下。 简介 abort中止当前进程并返回错误代码。异常终止一个进程。中止当前进程,返回一个错误代码。错误代码的缺省值是3。 代码 /*** *abort.c - abort a program by rai 阅读全文

posted @ 2019-12-13 16:46 活着的虫子 阅读(1252) 评论(0) 推荐(1) 编辑

关于DML的一些使用

摘要: DML是一种非常简单的标记语言,它帮助基于现有命令的输出发现和执行新命令。许多WinDbg命令(以及扩展命令)都支持DML。例如,下面是lm D命令,它显示DML输出: 在上面的命令输出中,当我单击“SillyThreadPool”链接时,调试器为我执行了另一个命令lmDvmSillyThreadP 阅读全文

posted @ 2019-12-13 11:51 活着的虫子 阅读(1180) 评论(0) 推荐(0) 编辑

掌握Visual Studio断点

摘要: 我知道你现在在想什么。断点?真的吗?关于断点有什么需要掌握的?你按F9然后停在代码行。如果你是这么想的,这篇文章是给你的:继续读 Visual Studio提供了一组相当丰富的断点类型和操作,可以使您的调试体验更加舒适和高效。我们将在这篇文章中讨论四种断点。 条件断点 定义断点时,可以将其与条件关联 阅读全文

posted @ 2019-12-13 11:34 活着的虫子 阅读(800) 评论(0) 推荐(0) 编辑

嵌套异常的循环

摘要: 真是个不可思议的巧合。仅隔几天,我就要解决两个与嵌套异常处理程序有关的问题。具体来说,导致堆栈溢出的嵌套异常的无限循环。这是一个非常致命的组合。堆栈溢出对于调试来说是一个极其严重的错误;嵌套异常意味着异常处理程序遇到了一个异常,这是不可能的;更糟糕的是,堆栈损坏也在幕后发生。请继续阅读以了解诊断嵌套 阅读全文

posted @ 2019-12-13 11:12 活着的虫子 阅读(1275) 评论(0) 推荐(0) 编辑

在VMMap中跟踪不可用的虚拟内存

摘要: VMMap是一个很好的系统内部工具,它可以可视化特定进程的虚拟内存,并帮助理解内存的用途。它有线程堆栈、映像、Win32堆和GC堆的特定报告。有时,VMMap会报告不可用的虚拟内存,这与可用内存不同。下面是32位进程(总共有2GB虚拟内存)的VMMap报告示例: 这种“不可用”的内存从何而来,为什么 阅读全文

posted @ 2019-12-13 10:03 活着的虫子 阅读(541) 评论(0) 推荐(0) 编辑

2019年12月12日

异常STATUS_FATAL_APP_EXIT(0x40000015)

摘要: 简介 STATUS_FATAL_APP_EXIT,值为0x40000015。代表的意思是"致命错误,应用退出"。它定义在 ntstatus.h头文件里,如下: //// MessageId: STATUS_FATAL_APP_EXIT//// MessageText://// {Fatal Appl 阅读全文

posted @ 2019-12-12 19:21 活着的虫子 阅读(1770) 评论(0) 推荐(0) 编辑

如何找出阻塞的线程正在等待哪个线程

摘要: 首先获取阻塞线程的调用栈 0:002> kbChildEBP RetAddr Args to Child 00edfdd8 7c90e9c0 7c8025db 0000026c 00000000 ntdll!KiFastSystemCallRet00edfddc 7c8025db 0000026c 阅读全文

posted @ 2019-12-12 15:33 活着的虫子 阅读(842) 评论(0) 推荐(0) 编辑

探索Windows 10的CFG机制

摘要: 转载https://www.anquanke.com/post/id/85493 0x00 前言 随着操作系统开发人员一直在增强漏洞利用的缓解措施,微软在Windows 10和Windows 8.1 Update 3中默认启用了一个新的机制。这个技术称作控制流保护(CFG)。 和其他利用缓解措施机制 阅读全文

posted @ 2019-12-12 14:16 活着的虫子 阅读(2296) 评论(0) 推荐(0) 编辑

异常0xc000041d的抛出过程

摘要: 为了说明这个过程,我们必须写一个示例程序,如下: #include "stdafx.h" #include <tchar.h> #include <stdio.h> #include <Windows.h> #pragma comment(lib, "user32") WNDPROC oldproc 阅读全文

posted @ 2019-12-12 11:29 活着的虫子 阅读(5280) 评论(0) 推荐(0) 编辑

2019年12月11日

异常STATUS_FATAL_USER_CALLBACK_EXCEPTION(0xc000041d)

摘要: 简介 STATUS_FATAL_USER_CALLBACK_EXCEPTION,值为0xc000041d。代表的意思是"回调期间遇到未处理的异常"。它定义在 ntstatus.h头文件里,如下: //// MessageId: STATUS_FATAL_USER_CALLBACK_EXCEPTION 阅读全文

posted @ 2019-12-11 16:34 活着的虫子 阅读(2183) 评论(0) 推荐(0) 编辑

2019年12月10日

VisualStudio中集成扩展调试SOS

摘要: SOS扩展也是可以和VisualStudio进行集成的,这样真的方便了我们调试一些性能要求比较高的程序,当程序运行一段时间后我们用VS附加到进程,然后查看一些重要的对象数据,但是此时我们看不到.NET运行时的一些数据,比如:对象的代龄,托管堆的大小,线程池的任务等。通过集成SOS扩展会让我们对程序的 阅读全文

posted @ 2019-12-10 14:14 活着的虫子 阅读(446) 评论(0) 推荐(0) 编辑

clr调试扩展和DAC

摘要: SOS.DLL、SOSEX.DLL这两个就是用来对.NET程序在Windows调试工具中起到翻译作用的调试器扩展。简单讲就是,这两个组件是.NET项目组专门开发出来用来对.NET应用程序进行方便调试用的,当然不用这两个扩展也能调试.NET程序,只不过就会很困难,会被很多细节束缚住。有了这个调试扩展之 阅读全文

posted @ 2019-12-10 14:08 活着的虫子 阅读(317) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---sx, sxd, sxe, sxi, sxn, sxr, sx- (设置异常)

摘要: 简介 sx*命令控制调试器在正在调试的应用程序中发生异常或发生某些事件时采取的操作。 使用形式 sx sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*} sx- [-c "Cmd1"] [-c2 "Cmd2"] {Excepti 阅读全文

posted @ 2019-12-10 13:54 活着的虫子 阅读(2416) 评论(1) 推荐(0) 编辑

CLR调试时的sos.dll/clr.dll/mscorwks.dll/mscordacwks.dll等动态库的版本对应

摘要: 大家都知道,在调试托管代码时,一定会加载到sos/clr/mscorwks/mscordacwks这些动态库,才能够很好的完成我们的调试工作,那么他们的版本对应关系是怎样的呢,特别是clr.dll/mscorwks.dll有什么关系呢? clr是通用语言运行时库,对应的就是clr.dll/mscor 阅读全文

posted @ 2019-12-10 10:23 活着的虫子 阅读(587) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---!runaway

摘要: 简介 !runaway扩展显示有关每个线程使用的时间的信息。 使用形式 !runaway [Flags] 参数 Flags指定要显示的信息类型。 标志可以是以下位的任意组合。 默认值为 0x1。位 0 (0x1) 使调试器以显示每个线程使用的用户时间量。 位 1 (0x2) 使调试器以显示每个线程使 阅读全文

posted @ 2019-12-10 09:50 活着的虫子 阅读(1266) 评论(0) 推荐(0) 编辑

2019年12月9日

WinDbg常用命令系列---!findstack

摘要: 简介 !findstack扩展查找所有包含指定的符号或模块的堆栈。此命令搜索线程调用堆栈中的特定符号,并显示匹配的线程。 使用形式 !findstack Symbol[DisplayLevel] !findstack -? 参数 Symbol 指定符号或模块。 DisplayLevel 指定显示内容 阅读全文

posted @ 2019-12-09 19:31 活着的虫子 阅读(464) 评论(0) 推荐(0) 编辑

WinDbg常用命令系列---!uniqstack

摘要: 简介 这个!uniqstack扩展扩展显示的所有线程的堆栈的所有当前进程,不包括显示为具有重复项的堆栈中。 使用形式 !uniqstack [ -b | -v | -p ] [ -n ] 参数 -b将导致显示以包括前三个参数传递给每个函数。 -v将导致显示以包括帧指针省略 (FPO) 信息。 在基于 阅读全文

posted @ 2019-12-09 19:20 活着的虫子 阅读(661) 评论(0) 推荐(0) 编辑

在没有符号和FPO的情况下遍历堆栈(帧指针省略)

摘要: 下面是应用程序崩溃转储的调用堆栈。报告的崩溃是名为“HelperLibrary”的模块内的访问冲突,我们没有该模块的符号或源代码。调用堆栈看起来不太可能: 0:000> kv ChildEBP RetAddr Args to Child WARNING: Stack unwind informati 阅读全文

posted @ 2019-12-09 18:50 活着的虫子 阅读(575) 评论(0) 推荐(0) 编辑

从符号名和偏移量自动获取源和行号

摘要: 从前,非托管代码开发人员必须非常努力地将代码偏移量与源文件名和行号关联起来。一种方法涉及为每个模块生成.cod文件(程序集列表),然后费力地将指令偏移量与.cod文件的内容进行比较。例如,如果从具有客户机接收到错误BatteryMeter!TemperatureAndBatteryUpdaterTh 阅读全文

posted @ 2019-12-09 17:49 活着的虫子 阅读(523) 评论(0) 推荐(0) 编辑

在WinDbg中显示和搜索std::map内容

摘要: 我们希望在WinDbg中自动显示、搜索和过滤std::map对象。std::vectors的脚本相对简单,因为vectors中数据的平面结构;map是更复杂的野兽。具体地说,Visual C++ STL中的映射是作为红黑树实现的。每个树节点都有三个重要的指针:左指针、右指针和父指针。此外,每个节点都 阅读全文

posted @ 2019-12-09 17:17 活着的虫子 阅读(763) 评论(0) 推荐(0) 编辑

在WinDbg中显示和搜索std::vector内容

摘要: WinDbg从来都不擅长可视化。尽管Visual Studio一直都有autoexp.dat,而且最近还出现了本机调试器可视化工具,但WinDbg用户不得不满足于转储内存区域和搜索内存来识别模式。另一方面,如果希望简化调试过程,Visual Studio目前没有提供任何自动化机会。从Visual S 阅读全文

posted @ 2019-12-09 17:04 活着的虫子 阅读(556) 评论(0) 推荐(0) 编辑

面向开发人员的Windows错误报告(WER)

摘要: Windows错误报告是更新的Windows XP上Dr.Watson的替代品。它监视故障并收集可以发送到要分析的服务器(如果用户允许)的有用信息。这项功能帮助微软修复了很多错误——由于收到的报告,微软能够对错误进行优先排序(基于最大点击数或其他严重性度量),并解决了很多问题。真正酷的是,任何开发人 阅读全文

posted @ 2019-12-09 15:16 活着的虫子 阅读(4638) 评论(0) 推荐(0) 编辑

在WinDbg中调试时如何查看类/结构对象成员的值

摘要: 有时,当您调试应用程序时,会碰巧得到指向类的指针,该类只有几个成员变量,包括结构和其他类对象!如何看待内部类/结构变量成员的值??所以,这是提示。下面是用于演示命令的代码。 struct testStruct { int i; char ch; long l; char* str; }; class 阅读全文

posted @ 2019-12-09 11:35 活着的虫子 阅读(2931) 评论(0) 推荐(0) 编辑

如何调试由其他可执行文件启动的进程!

摘要: 问题是,我们要调试由其他应用程序运行的应用程序的启动代码!例如,我将打开一个控制台(cmd.exe),然后打开calc.exe,我想调试初始的calc.exe代码。。Windbg已经解决了这个问题!当您选择“打开可执行文件”时,您有一个小的复选框,上面写着“同时调试子进程”,它实际上确保所有由父EX 阅读全文

posted @ 2019-12-09 11:04 活着的虫子 阅读(478) 评论(0) 推荐(0) 编辑

仅为一个模块加载/重新加载符号

摘要: 很多时候,在调试会话中,我们需要加载/重新加载特定模块的符号(在WinDbg的上下文中)。例如,我们开始调试,在调试时设置正常的符号路径并下载,发现我们需要特定模块的符号。我们修改符号文件路径。如果我们这样做了,.reload /f它从同一个位置再次加载所有符号,这可能需要时间。所以,只找到了加载一 阅读全文

posted @ 2019-12-09 10:58 活着的虫子 阅读(494) 评论(0) 推荐(0) 编辑

如何查看WinDbg扩展有哪些命令

摘要: 如果您想查看任何windbg扩展所支持的命令,可以采用各种方法。 你可以用!<ext_name>.help命令查看该扩展支持的所有命令。用扩展模块名替换<ext_name>。(注意:只有特定扩展支持help命令时,此操作才有效。) 您可以在Dependency Walker中打开扩展DLL,它将在导 阅读全文

posted @ 2019-12-09 10:40 活着的虫子 阅读(356) 评论(0) 推荐(0) 编辑

SOS从内存转储中提取模块(EXE、DLL和其他二进制文件)

摘要: 假设有一种情况,您从客户那里得到一个内存转储,需要模块(DLL、EXE、OCX等)来进一步调试。。(.NET模块可用于通过反向工程查看源代码。)我们可以使用windbg目录中的clr10\sos.dll保存所有模块(在获取内存转储时由目标进程加载)。有趣的是,sos.dll不仅可以提取托管模块,还可 阅读全文

posted @ 2019-12-09 10:28 活着的虫子 阅读(757) 评论(0) 推荐(0) 编辑

Visual Studio 调试技巧---指针,元素个数

摘要: 刚才,我在Visual Studio 中发现了一个以更好的方式调试指针的技巧。您可以在监视窗口中选择“n”,其中“n”是要显示的元素数。我认为下图是不言而喻的。 阅读全文

posted @ 2019-12-09 10:16 活着的虫子 阅读(654) 评论(0) 推荐(0) 编辑

在调试时,有什么更好的方法可以监视最后一个win32错误?

摘要: 我发现在代码中使用win32api时,需要多次监视最后一个win32错误!(在每次使用API后调用GetLastError()是不可行的解决方案!).. 在Visual Studio中,它们提供了一个非常好的小特性。你可以在“监视”窗口中写入@err,hr 同样,您可以使用另一个伪寄存器@eax来监 阅读全文

posted @ 2019-12-09 09:59 活着的虫子 阅读(180) 评论(0) 推荐(0) 编辑

从WinDbg中的转储查看操作系统版本和SP详细信息

摘要: 这是一个很常见的问题,我们几乎总是遇到。想象一下这样一种情况,我们从某个地方得到一个内存转储,想看看在那里运行的是什么操作系统,安装了什么SP。。为此,有一个非常简单的命令。 0:000> vertargetWindows 7 Version 7601 (Service Pack 1) MP (8 阅读全文

posted @ 2019-12-09 09:47 活着的虫子 阅读(1037) 评论(0) 推荐(0) 编辑

2019年12月7日

可以使用WinDbg将PE映像作为转储文件打开

摘要: WinDbg、ntsd、cdb、kd和其他任何使用DbgEng打开转储文件的工具都有一个鲜为人知的特性。事实证明,使用DbgEng提供的任何功能,在任何可以打开转储文件(用户转储、内核转储等)的地方,都可以打开PE映像(.exe/.dll/.sys/etc),并让调试器将其视为只包含所选PE映像内容 阅读全文

posted @ 2019-12-07 14:23 活着的虫子 阅读(312) 评论(0) 推荐(0) 编辑

常见WinDbg问题及解决方案

摘要: 当你调试一个程序时,你最不想处理的是调试器不能正常工作。当你试图集中精力跟踪一个bug时,总是会因为次要的问题而被忽略,尤其是当调试器的问题导致你失去一个重新编程或者浪费了大量的时间等待调试器完成它,而调试器知道这需要永远做些什么的时候。这是我时常会遇到的大量问题,所以我整理了一些常见问题的简短列表 阅读全文

posted @ 2019-12-07 14:02 活着的虫子 阅读(1621) 评论(0) 推荐(0) 编辑

在崩溃转储中查找所有可能的上下文记录

摘要: 如果您调试了一段时间的崩溃转储,那么您可能遇到了这样的情况:调试器提供的初始转储上下文对应于在处理初始异常时发生的第二个异常,该异常可能更接近您正在调查的问题中的原始基础问题。这可能很烦人,因为“.ecxr”命令将指向次要故障异常的位置,而不是原始异常上下文本身。然而,在大多数情况下,原始的、主要的 阅读全文

posted @ 2019-12-07 13:44 活着的虫子 阅读(300) 评论(0) 推荐(0) 编辑

再谈System.BadImageFormatException

摘要: 今天,当我们继续学习.NET异常处理系列时,我们将查看System.BadImageFormatException。System.BadImageFormatException与GIF或JPG无关,而是在.NET应用程序尝试加载与当前公共语言运行库(CLR)所需的正确格式不匹配的动态链接库(.dll 阅读全文

posted @ 2019-12-07 10:31 活着的虫子 阅读(6674) 评论(0) 推荐(0) 编辑

交叉引用:Microsoft.NET标准异常 和错误代码对照表

摘要: 简介 此表旨在帮助将Windows运行时应用程序错误代码交叉引用到Microsoft.NET标准异常,这些异常可以作为应用程序异常处理技术的一部分。 对照表 .NET Exception (Namespace)HRESULT(s) - symbolicHRESULT(s) - rawAccessVi 阅读全文

posted @ 2019-12-07 09:49 活着的虫子 阅读(2528) 评论(0) 推荐(0) 编辑

2019年12月6日

源索引和符号服务器

摘要: 简介 不久前,我必须建立一个符号服务器,带有源索引,那时,关于这个主题的信息不多,所以我很难让所有的东西按照我们想要的方式工作。不幸的是,仍然只有这些相同的信息,但是自从微软将源代码发布到.NET框架并自动将其符号服务器添加到Visual Studio 2010以来,似乎有更多的人意识到了这一点。大 阅读全文

posted @ 2019-12-06 17:10 活着的虫子 阅读(824) 评论(0) 推荐(0) 编辑

如何使用Microsoft的驱动程序验证程序解释无法分析的崩溃转储文件

摘要: 这篇文章解释了如何使用驱动程序验证工具来分析崩溃转储文件。 使用Microsoft驱动程序验证工具 如果您曾经使用Windows的调试工具来分析崩溃转储,那么毫无疑问,您已经使用WinDbg打开了一个崩溃转储文件。WinDbg将对崩溃文件执行内部分析,并建议您从!analyze命令开始。该命令输出堆 阅读全文

posted @ 2019-12-06 16:30 活着的虫子 阅读(792) 评论(0) 推荐(0) 编辑

快速解决用户生产问题

摘要: 简介 开发人员面临的最大问题之一是生产问题何时发生。开发人员必须快速找到问题的根本原因,或者在开发环境中复制相同的问题来解决问题。由于时间是至关重要的,在这方面,迟迟得不到根本原因可能导致客户的金钱损失或导致公司的声誉损失。有效地解决生产问题和缩短周转时间的方法很少。 调试问题的方法 检查调用堆栈的 阅读全文

posted @ 2019-12-06 15:28 活着的虫子 阅读(265) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 19 下一页

导航