XSLT存档  

不及格的程序员-八神

 查看分类:  ASP.NET XML/XSLT JavaScripT   我的MSN空间Blog

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;
}

 

posted on 2022-11-26 14:58  不及格的程序员-八神  阅读(96)  评论(0编辑  收藏  举报