
软件调试技巧
文章平均质量分 76
china_jeffery
持续学习者;
擅长开发开源组件及相关工具;
长期致力于应用各种IT新技术提升生产效率和解决实际问题;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++生成Dump文件
C++开发的应用程序避免不了各种崩溃,空指针,野指针,栈溢出等等。为了方便定位问题,我们一般在程序崩溃的时候自动生成一个dump文件,然后通过dump文件结合pdb来定位问题。c++生成dump文件的代码网上有很多,但大多使用起来不那么方便;通过本文介绍的方法只需要使用2个宏就可以实现自动生成dump的功能。代码包含中将EasyDump.h和EasyDump.cpp文件中:原创 2017-11-01 15:01:53 · 86088 阅读 · 0 评论 -
标准库std::min/std::max与min/max宏冲突
如题,因为windef.h中定义了max和min宏:#ifndef NOMINMAX#ifndef max#define max(a,b) (((a) > (b)) ? (a) : (b))#endif#ifndef min#define min(a,b) (((a) < (b)) ? (a) : (b))#endif#endif /* NOMI原创 2017-12-14 12:04:47 · 99520 阅读 · 0 评论 -
OutputDebugString完美封装
C/C++开发中经常需要输出调试信息,我们一般使用OutputDebugString输出到DebugView或者调试器输出窗口。 OutputDebugString原型如下:void WINAPI OutputDebugString( LPCTSTR lpOutputString);它只支持一个字符串参数。 在实际使用中,一般都会将其封装,支持可变参数,方便调用。封装了2原创 2017-12-12 14:48:37 · 90316 阅读 · 2 评论 -
DebugView远程查看日志
我们一般都是在程序运行的本地电脑使用debugview查看日志输出,但其实debugview也支持C/S模式(服务端-客户端模式)的日志查看方式,通过这种方式我们就可以通过debugview远程查看某一台计算机上的日志输出了。使用方式: 1. 在远端运行debugview作为服务端。debugview.exe /a在近端(需要查看日志的计算机)运行debugview,点击connect,输入远端原创 2017-12-24 23:18:48 · 94243 阅读 · 0 评论 -
Windbg -- 查看调用堆栈
一. 显示堆栈信息k*命令[~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] [FrameCount][~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr [FrameCount][~Thread] k[b|p|P|v] [c] [n] [f] [L] [M] = BasePtr StackPtr Instr...原创 2018-02-12 17:19:45 · 94315 阅读 · 0 评论 -
OllyDbg使用教程
一、OllyDbg获取OllyDbg目前官方已经停止维护,各大论坛针对OllyDbg出了定制版,主要是对的插件进行了集成,比较出名的是“吾爱破解专用版Ollydbg”。同时还有OllyICE,也是由一些爱好者对OllyDBG修改,新增一些功能或修正一些bug而形成的一个版本。可以从此处下载获取:http://download.csdn.net/download/china_jeffery/...原创 2018-03-02 22:33:50 · 60991 阅读 · 0 评论 -
PE文件格式
Windows PE文件格式的图片: 请下载或者放大后查看。 上图中对部分字段的解释使用“未知”等字样,需要了解每个字段的详细意义,可以参考《Windows PE权威指南》上图中定义的PE格式都可以从winnt.h文件找到对应的定义(从14862行开始):...原创 2017-12-31 00:23:40 · 98470 阅读 · 0 评论 -
从汇编的角度分析函数调用过程(2)
#include <stdio.h>int add(int a, int b) { int c = 0; c = a + b; return c;}int main(){ int r = add(1, 2); return 0;}我们使用Visual Studio 2017编译上面代码,并在在工程配置中将函数调用约定设置为_...原创 2018-02-12 16:56:22 · 74858 阅读 · 1 评论 -
从汇编的角度分析函数调用过程(1)
一. 函数参数传递形式函数的参数传递有2种方式:堆栈方式、寄存器方式。 如果是堆栈方式传递的,就需要定义函数参数在堆栈中的传递顺序,并约定函数被调用之后,由谁来平衡堆栈; 如果是寄存器方式传递的,就需要确定参数存放在哪个寄存器中。 每一种方式都有其优缺点,而且与使用的编程语言有关系,不存在哪种方式好与坏。我们在开发中经常遇到调用约定类型,如__cdecl、stdcall、PASCAL...原创 2018-02-12 11:08:53 · 71831 阅读 · 0 评论 -
Windbg使用手册
一、安装从下面的链接或其他链接下载安装: Download Debugging tools for Windows二、配置常用的配置就是符号文件搜索路径、可执行文件搜索路径、源码文件搜索路径配置。符号文件搜索路径配置(Symbol File Path) 在菜单项File-> Symbol File Path中设置,如D:\symbol_path;SRV*D:\symb原创 2018-01-03 23:00:47 · 114994 阅读 · 2 评论 -
字符串格式化函数引起的崩溃
一. 问题描述我们常用的格式化字符串函数有:HRESULT StringCchVPrintf( _Out_ LPTSTR pszDest, _In_ size_t cchDest, _In_ LPCTSTR pszFormat, _In_ va_list argList);int printf ( const char * format, ... );...原创 2017-12-12 23:11:25 · 91449 阅读 · 0 评论 -
WinDbg -- 调试关键区(CriticalSection)死锁
一. 演示示例这里一个有关键区锁死问题的程序,运行之后依次点击“CS锁死”按钮、右上角退出按钮,程序就会卡死。(图1) 对于眼下的这个问题,界面完全失去响应,这说明负责消息处理的UI线程阻塞了。对于几乎所有的windows GUI程序,编号为0的初始线程就是UI线程,windows发现该界面一段时间没有消息响应之后就会在标题后面加上“(未响应)”。二. WinDbg调试启动Windbg,附加到原创 2017-12-28 23:55:00 · 95250 阅读 · 0 评论 -
WinDbg -- 调试互斥体(Mutex)死锁
一. 演示用例#include <windows.h>#include <tchar.h>#include <process.h>HANDLE hMutexA = NULL;HANDLE hMutexB = NULL;unsigned __stdcall ThreadProc1(void * pArg) { WaitForSingleObject(hMutexA, INFINITE);原创 2017-12-28 23:45:29 · 97573 阅读 · 0 评论 -
GDB调试入门
启动gdbgdb -tui:分屏显示源代码 gdb -q:不显示开始的提示信息可以在.bashrc中加入alias gdb="gdb -q -tui"开始调试执行run(需要提前设置断点),也可以在调试过程中重新运行调试的程序,run后可以跟随发给该程序的任何参数。常用命令 命令 功能 list(简写l) 显示当前行前面和后面的10行代码 list n1 n2 显示n1到行和原创 2017-12-01 17:47:09 · 87838 阅读 · 0 评论 -
如何生成转储(dmp)文件--工具篇
转储文件也就是我们常说的dump文件。可以把转储文件看成软件的某个时刻的一个快照。转储文件一般都是在软件出现问题时手动生成或者程序自动生成。下面我们介绍几种借助第三方工具生成转储文件的方法。一、 任务管理器任务管理器可以说是最易获取的系统工具,同时它具有生成转储文件的功能。但要注意的是在64位操作系统上面,默认启动的是64位的任务管理器。使用任务管理器生成转储文件需要遵循一个原则:原创 2017-11-01 11:53:10 · 89895 阅读 · 0 评论 -
Fiddler常见用法
Fiddler官网: https://www.telerik.com/fiddler一、会话过滤器选中【Filters】–&amp;gt; 【Use Filters】开启过滤功能。二、抓取HTTPS请求【Tools】–&amp;gt; 【Options】–&amp;gt;【HTTPS】 三、网速模拟功能【Rules】–&amp;gt; 【Customize Rules】打开自定义规则脚本...原创 2018-10-15 15:01:15 · 644 阅读 · 0 评论