在VC中使用Debug
2011-07-27 10:56
351 查看
在VC中使用Debug
选定Debug编译选项Build -> Set Active Configuration -> Win32 Debug
或者在Build工具栏上的ListBox中选择Debug。
Debug定义了_DEBUG宏,而Release定义了NDEBUG宏。
先按F12编译Browse信息
这样编译后可以查到变量定义。
执行Debug
按F5(注意,如果按Ctrl+F5 是Run,起不到Debug的作用)。
在Debug时一定要把Debug工具栏拉出来,方便调试。
Breakpoints(F9)
用Alt+F9可以对所有的断点进行编辑。
对指令地址(EIP)指定断点
当EIP的值为指定值时中断。如下图:是对SetWindowLong的地址进行设置的(注意:一定要在前面加0x)。
对内存地址设置断点
当指定内存地址发生变化时中断(在运行时设置才管用)。
Show Next Statement(Alt+Num *)
显示当前指令所处的代码位置
Step Over(F10)
单步追踪,遇到Call语句不进入
Step Into(F11)
单步追踪,遇到Call语句进入
Step Out(Shift+F11)
跳出当前函数调用
Run to Cursor(Ctrl+F10)
运行到光标所处位置
Memory Leaks
内存泄漏。要想检查到memory leaks,必须包含<afx.h>头文件(实际上是#pragma comment(lib, "mfc42ud.lib")在起作用)。
注意:内存泄漏是一个十分严重的问题,尤其对于需要长时间运行的程序(进程长时间保留在内存中)更是如此。有一个重要的事实是,当进程正常退出时,操作系统负责清空该进程的所有内存。
QuickWatch(Shift+F9)
可以更改变量运行时的值。
Watch窗口
输入"err,hr"可以动态查看GetLastError信息。可以输入寄存器。
(long *)ESP可以查看堆栈内容。
Variables窗口
当前函数的局部变量
Registers窗口
EIP、ESP、ECX
Memory窗口
对变量可以拖放。Options->Debug中可以设置
Call Stack窗口
Disassembly窗口
Set next statement 跳过某些语句(有时用于Hack)
Goto Source
Ctrl+G
在%system%目录下创建de.bat文件,内容如下:
dumpbin /exports %1>a.txt
a.txt
对dll输出函数进行查看
Apply Code Changes(Alt+F10)
当处于Debugging状态时,如果更改了代码,可以执行此命令,可以使得重新编译后再运行到当前状态。
Debug->Modules窗口
Profile(Build菜单下)
要先设置Project -> Settings -> Link -> Enable profiling
ASSERT,VERIFY
TRACE
在Debug状态下输出,同时要求Enable tracing开启。
AfxMessageBox
cout,printf
对控制台程序进行输出测试
OutputDebugString
在Debug和Release状态下都可以输出。
DebugBreak,_asm{int 3}
强制中断
如何对Release版本进行Debug
进行如下设置,然后就可以进行Debug了。
Settings -> C/C++ -> Category(General) -> Debug info=Program Database
Settings -> Link -> Category(General) -> Generate debug info=true
输出汇编文件
Project Settings中如下设置:
则会产生相应的汇编文件 (*.asm / *.cod)
在Win32程序中输出字符串到控制台
if (AllocConsole())
{
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole)
{
DWORD dwWritten;
char sOut[]="This is a test string.\n";
WriteConsole(hConsole, sOut, strlen(sOut), &dwWritten, NULL);
}
}
//FreeConsole();
相关文章推荐
- 如何使用VC++调试程序 Debug版本与Release版本
- 在VC中使用Debug
- 如何使用VC++调试程序 Debug版本与Release版本
- 使用VC的DEBUG检查内存泄漏
- VC中为什么Debug或者Release中的.exe文件无法使用
- 如何在VC中使用DEBUG
- 使用pjsua-i386-Win32-vc8-Debug.exe测试,可以看到视频
- 在VC中使用Debug
- 如何在VC中使用DEBUG(ZZ)
- 安装vs2008 sp1后程序出错--VC2008中 “Debug\Ckeshe.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- 在使用VC开发软件的过程中,正当要享受那种兴奋的时候突然发现,release与debug运行结果不一致
- (转)VC/MFC之ListCtrl控件使用经验总结
- VC下使用JMail实现邮件收发
- VC使用mingw32编译ffmpeg静态库所需文件(一),ffmpegshim.c
- VC6 在使用VC助手(Visual AssistX)在Win7下不能使用↑↓←→及回车键选择的解决办法
- 如何在debug模式下,使用正式的签名文件
- 使用VC获取字符串的长度
- 在vc2008 mfcC++中使用sqlite的示例
- 《数据结构》实验一:VC编程工具的灵活使用 实验报告
- 关于Android Studio使用.9.png图片引起的的Error:Execution failed for task ':app:mergeDebugResources'. 问题