VC++ 关于VC6.0编译环境的数据断点调试
((CDatabase*)0x05274088)->m_strConnect //{"DSN=DYCW;UID=SA;DATABASE=DYCW;PWD=1"}
#define MAX_INDEX_NUM 10
VOID CSDN::Function()
{
for(int i=0;i<MAX_INDEX_NUM;i++)
{
//do something
}
for(i=0;i<MAX_INDEX_NUM;i++)
{
//do something others
}
}
而你转成了更高版本,必须如此
#define MAX_INDEX_NUM 10
VOID CSDN::Function()
{
for(int i=0;i<MAX_INDEX_NUM;i++)
{
//do something
}
for(int i=0;i<MAX_INDEX_NUM;i++)
{
//do something others
}
}
或者
#define MAX_INDEX_NUM 10
VOID CSDN::Function()
{
int i=0;
for(i=0;i<MAX_INDEX_NUM;i++)
{
//do something
}
for(i=0;i<MAX_INDEX_NUM;i++)
{
//do something others
}
}
然后你想象一下,你项目里有成百上千上万的这种代码。类似的还有隐式转换的一些问题,VC6.0还有个函数实现声明检测的问题(实现和声明完全不同,编译通过)。。。。
所以有时候因为时间原因,暂时用vc6。
今天就来说一下,关于数据断点的调试问题。因为大多数用的vs版本都比较高,
先说说数据断点吧,数据断点也可以叫地址断点,用于帮我们监测该地址的数值变化,进而触发断点。也就是说,如果我们做项目时候,发现一个变量(不管是成员变量亦或是全局变量),在某一时刻突然改变,但是你又不知道在哪里变化,或者你想监测它的变化顺序,就可以用这个神器了。
VS的数据断点调试如下:
新建这个位置,点开会有新建数据断点,然后我们把要监测的地址写在文本框中,确定即可。当该地址变量变化,就会自动跳转堆栈,查看调用堆栈即可,如果你想看下面的变化,就继续f5啦~
VC6.0我也找到了,这告诉我麻雀虽小五脏俱全,我们不应该嘲笑过时的东西,它们那个时候研发就很困难了,后续的vs升级也只不过是站在了巨人的肩膀上,py,js这些都是前辈的封装而已。
CTRL+B就是了,让我们欣赏下当时的老图吧!(都来自网络,我这里外网机都没装vc6所以不自己开了)
条件断点(当是你写的条件就触发喽,这里不详细解释了):
Conditon就是条件了
数据断点:
这里就代表对0x12ff58地址的监控。
条件断点(Conditional Breakpoint)
断点大家都会用,条件断点相信对于经常调试的也不陌生,使用方法如下图,
看上面这个右键菜单,Hit Count估计很多人也再用,用它来指定在第几次hit到这个断点的时候断下来,
接下来就更高级一些,Filter,相信很多人在调试多线程程序的时候都遇到过被其他线程干扰吧,好不容易断下来,一步一步F10,忽然间另外一个线程又把前面断点hit了,刚才我跳的线程是哪个?想找到就难了。接下来就需要Filter来出场了。通过Filter我们可以过滤需要break的机器/进程/线程。
接下来就是When Hit选项了,这个估计很多人用过它来跟踪变量,上图,带过。
Export, 导出断点的功能用的就更少了,其实有些场景断点导出可以让你少费很多话。比如你在某段代码发现一个别人的bug,你可以将断点导出为xml,然后将它attach到bug上,bug owner直接找到对应版本导入断点,运行程序就可以了。
数据提示(Data Tips)
调试的时候将鼠标放在变量名上来查看关心的数据,我们都是这么做的,但是如果一段逻辑需要反复执行,例如调试某段算法,你可以多点一下鼠标,将这个变量钉在代码旁边,这样比去watch窗口看要少转很多眼珠哦。
另外这些data tip也是可以导入和导出的。
异常设置
{CJXCApp::LoginAccount,"F:\Yangl\药械\01 Workspace_YX_HC _liul\02 JXC_MED_YX_HC_private\JXC.cpp",JXC_MED_YX_d.exe}CJMUDITools::Test({*}str) no {CJXCApp::LoginAccount,"F:\Yangl\药械\01 Workspace_YX_HC _liul\02 JXC_MED_YX_HC_private\JXC.cpp",JXC_MED_YX_d.exe}jmTools.GetUDITypeCode("a",""); no {CJXCApp::LoginAccount,"F:\Yangl\药械\01 Workspace_YX_HC _liul\02 JXC_MED_YX_HC_private\JXC.cpp",JXC_MED_YX_d.exe}jmTools.GetUDITypeCode((const CString&)"a",""); no jmTools.GetUDITypeCode((const CString&)strBarcodeInput,"");no jmTools.Test("a") ok {CJXCApp::LoginAccount,"F:\Yangl\药械\01 Workspace_YX_HC _liul\02 JXC_MED_YX_HC_private\JXC.cpp",JXC_MED_YX_d.exe}jmTools.Test("a")ok int TestFunc(int a, int b) ok { return a+b; }
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.