在创建MFC程序时,winuser.h文件中老是出现:error C2061: 语法错误: 标识符“lpString”,麻烦高手解决下

在创建MFC程序时,winuser.h文件中老是出现:error C2061: 语法错误: 标识符“lpString”,麻烦高手解决下,第1张

我最近也在学习这方面,这是我在网上找到的一点资料,希望能帮到你:

如果你顺利到到一个模拟器,那么就可以开始调试了.首先说一下断点,VC中的断点分三大类,一类是本地断点,一类是数据断点(也称之为条件断点,有人称之为高级断点),还是一类是消息断点这三类断点分别对应于快捷键"ALT+F9"打开的对话框中三个选项卡.由于消息断点是用于跟踪WIN的消息,所以在MTK中用不着.在模拟器中一般我们只使用本地断点与数据断点.本地断点和数据断点在BUG调试中举足轻重,熠熠生辉。熟练掌握断点技巧,可以使工作事倍功半。可能有些人会使用断点,但却不知道断点在模拟器中有什么妙用.断点有两个最常使用也的作用,一是跟踪代码执行情况,二是观察断点处局部变量值的变化.这两个功能应用最多.但他在MTK模拟器中还有两个隐含的用途,一就是快速定位文件,MTK本身的源代码大约有差不多上万个文件,而加入SP后,代码大约已经超过了万数.在这里面查找文章,查找函数,是一件很困难的事,这时就需要使用断点了.你在代码阅读工具SI中可以很轻松的利用"CTRL+O"打开文件,也可以使用"F7"快速定位到函数,但在VC中却没这么方便,不过你可以使用断点,比如想在VC中打开某个文件wgui_categories_CM.c,只要VC中使用"ALT+F9",在break at编辑框里输入 .4693,按F5执行DEBUG后VC就能自己定位销稿到这个文件wgui_categories_CM.c的4693行。这是文件断点,也可以打函数断点,比如文件wgui_categories_CM.c的4693行对应的是函数ShowCategory16Screen,也可以直接在break at编辑框里输入ShowCategory16Screen,使用F5键DEBUG时,函数运行到拨号界面时,就会停下来供你调试。本地断点就是这样使用的。那么本地断点有什么用呢?或者说有什么特殊用途呢?简单举几个例子吧,但断点可以应用于解决十分多的问题中,不要因为我的例子束缚了你的想象力.

a.如何使用断点快速定位到问题点呢?如果我们发现,拨号窗口显示出了问题,但我们对代码不熟,不知道拨号窗口的代码在哪个文件,哪一行,我们就可以在EntryNewScreen函数上打断点,当进入拨号时他就会停下来,这时我们能过堆栈窗口信息就可以很轻松的找到这个窗口的实现函数。详细研究代码,就可以找到解决方法.

b.断点可以用于快速解决窗口显示问题,比如我们的拨号窗口,有一个图片显示不正常,这时我们可以在绘图函数gdi_image_codec_draw上打上断点,进入拨号窗口中,每一次显示图片,都会在该函数上停下来,结合堆栈,我们可以很容易找到是哪个地方代码出来问题,从而找到解决方法.有关此类的函数太多,不一一举例.

C.断点可以用来研究全局变量被意外修改问题,我们打开断点对亏亏孝话框,选第二个选项卡,把需要跟踪的变量打进去,当每次变量变化时,VC都会停下来等我们调试.也可以设置条件,假设某全局变量U8 g_XXX, 其值等于5时会出错,但你不知道这个全局变量在什么地方被什么代码赋值为5,这时就可以设置数据断点,在第二选项卡上面的对话框里输入g_XXX == 5,当其值为5时就会停下来.

d.研究代码也可以使用断点,比如MTK代码里使用有很多函数指针封装,例如gui_print_text指针,你想研究他的实现过程,但由于是指针,你找不到他的函数体,这时你就可以在数据断点中,把指针gui_print_text输入进去,重启模拟器时,他就会定位到ui_print_text函数处.

兹举这空敏四个例子吧,断点可以使用于你需要调试的任何场合,但过多的断点会影响你查找问题的速度,等熟练使用时,就可以有针对性的对某些变量和函数打断点以解决问题.这是一个积累的过程

3.堆栈调试,Alt+7打开堆栈窗口.该窗口中我们可以看到函数之间的调用关系,这是十分有用的,一般都是结合断点使用,定位BUG和研究代码十分有用.由于上面有例子,这里就不举了

4.变量窗口,Alt+4打开变量窗口,该窗口会自动显示断点代码处使用的变量及其值,阅读代码解决BUG时使用,单步执行时经常参考该窗口数据

5.WATCH窗口,按Alt+3打开,由于变量窗口自动显示的变量有时不是我们需要的,这时就可以把我们需要查看的变量拖放到该窗口研究,结合断点使用,并且这里也支持表达式取值,真是太棒了.

6.内存窗口,Alt+6打开内存窗口,内存窗口可以显示一块内存的内容,这是很有用的,比如我们要跟踪短信内容,有一个短信内容的指针,把该指针输入WATCH窗口,只能看到该指针指向的第一个值,要看其他的,会很麻烦,你只能输入表达式,但你把该指针输入内存窗口,就不必这样费事了

7.Alt+8打开汇编指令窗口,这个窗口用处不是很大,学习汇编的话,还是有用处的.一般情况下,如果第三方的库文件出了问题,也就只能使用这个窗口调试了.普通情况下,如果错误定位在C标准库文件的汇编代码上,只有一种可能,就是你的调用出错了.

出现这个异常:vector iterator not dereferencable,通常都是由于迭悔唯代器失效裂卖了,比如在上述代码中++之后实际上已经肆前逗超过了末尾,更常见的情况是在erase之后:iter=m_list.erase(iter)这行之后是不是有可能iter已经无效了呢?

应该是出错了内存泄露,导致死掉,看看你动态分配的内存吧。

举个例子,你利用向导生成一个程序,调搭卖一下,带仿看看死机吗?不知行逗可能吧。如果那都死机,说明你的VC安装程序有问题,再或者是硬件有问题。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12531617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存