没有合适的资源?快使用搜索试试~ 我知道了~
首页VS2008下追踪windowsapi的方法
资源详情
资源评论
资源推荐

转自胡兵同学的东西,我的贡献是
把各部分联系起来!!!
(
1
)让
Visual Studio
载入
Symbol
(
pdb
)文件
在 VC 编译工程的编译连接阶段,会产生 Symbol 文件,也就是常说的
pdb 文件。pdb 的全称为 program database,在 MSDN 中的解释为,pdb
文件是一个在编译和链接阶段产生的,包含了类型和调试符号信息的二进制文
件。pdb 文件中包含了各个函数的符号表,也是进行 WinDbg 调试必不可少
的文件。
既然 pdb 文件是给调试器使用的,那么 Visual Studio 调试器也就可以
使用之。通过如下设置,Visual Studio 便可以在调试过程中加载 pdb 文件了。
Tools --> Options --> Debugging。
在“Symbol le (.pdb) locations:”下面的控件中输入微软默认 pdb 文件
的下载路径“http://msdl.microsoft.com/download/symbols”。
在“Cache symbols from symbol servers to this directory:”下的编
辑框中输入本地保存路径,如:D:/WinSymbols/MsDownSymbols。
下面两个 CheckBox 的意思分别为:
“Search the above locations only when symbols are loaded
manually”。
调试器仅仅载入手动载入的 Symbol。勾上此选项,调试速度会更快,但
pdb 载入相对较少,调试信息较少,建议不勾选。
“Load symbols using the updated settings when the dialog
is closed”
对话框关闭后,立刻加载符号表。勾上此选项可以立刻看到效果,调试速
度当然会稍微慢一点,建议勾选。
点击 OK 关闭对话框,设置便生效了。
如图所示:

设置过了,当然要看看效果啦。
我们先看看正常情况下 CallStack 的状态,建立一个普通 Win32 程序,
在 InitInstance 入口下个断点,F5 开启调试,在 CallStack 窗口如下显示:
我们可以看到,在最下面两行中,信息是灰掉的,kernel32.dll 中那个函数
调用了我们的 wWinMainCRTStartup 也看不到,进程最开始由哪个函数创建
也看不到。
现在看看设置了 Symbol 时 CallStack 的状态,建立一个普通 Win32 程
序,在 InitInstance 入口下个断点,F5 开启调试,在 CallStack 窗口如下显

示:
我们可以看到,程序是由 kernel32.dll 中的导出函数
“_BaseProcessStart”开始的,_BaseProcessStart 调用了我们的
wWinMainCRTStartup 函数,然后程序就运行起来了。
当然设置 Symbol 的用处远远不止这些,其余的就等您慢慢发现。
注:设置 Symbol 之后,调试速度会慢下来,如果无需知道系统函数是如何调
用的,建议调试时不设置 Symbol。
(2)调试 Windows API
真正写过代码的同学没有哪个没有调试过自己的代码吧。
在 Visual Studio 中,如果我们想看一个 C++ Run Time 库函数(如:
strcpy)的实现,在调试当前行按 F11,便可以进入函数内部,来单步执行,调
试了。但如果碰到 Windows API 函数,如:ShellExecute,F11 不能直接进入调
试,怎么办呢?我们能进入 ShellExecute 函数内部调试吗?当然能,但你看完
本篇文章之后,便拥有了这个能力。
在开始之前,需要设置 Visual Studio 加载 pdb 文件,关于如何设置,可以
看本博客的另一篇文章:(1)让 Visual Studio 载入 Symbol(pdb)文件。
假设你的 Visual Studio 已经设置好加载 pdb 文件了,现在你可以建立一个
Demo 工程,并写下如下代码:
::ShellExecute(NULL, L"open", L"calc.exe", NULL, NULL, SW_SHOW);
当前行指向 ShellExcute 这行时,我们选择菜单中的 Debug à Windows à
Disassembly,此时我们看到源码被以汇编的形式展现出来了,如图所示:
剩余10页未读,继续阅读

















chelp
- 粉丝: 25
- 资源: 46
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论2