Visual C++开发工具与调试的20个技巧(下)

来源:互联网 发布:知无涯者拉马努金传 编辑:程序博客网 时间:2024/05/02 01:14
11. 如何再ClassWizard中选择未列出的信息

  打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。

  12. 如何检测程序中的括号是否匹配

  把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

  13. 如何查看一个宏(或变量、函数)的定义

  把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

  14. 如何添加Lib文件到当前工程

  单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。

  15. 如何快速删除项目下的Debug文件夹中临时文件

  在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。

  16. 如何快速生成一个现有工程除了工程名外完全相同的新工程

  在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击【Next】按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。

  现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下Common/MSDev98/Template目录中删除该Wizard对应的.awx和.pdb文件。

  17. 如何解决Visual C++ 6.0不正确连接的问题

  情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。

  这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。

  18. 引起LNK2001的常见错误都有哪些

  遇到的LNK2001错误主要为:unresolved external symbol “symbol”

  如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。

 一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。以下是可能产生LNK2001错误的原因:

  <1>由于编码错误导致的LNK2001错误

  (1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。

  (2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

  (3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。

  (4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。

  (5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。

  <2>由于编译和联机的设置而造成的LNK2001错误

  (1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。这种情况下使用/NOD将导致LNK2001错误

  (2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。

  (3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对 “__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生 LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。

  (4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。

  (5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。

  (6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

  (7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是 在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。为避免该问题的发生,应该在相应的头文件中用inline 关键字标志为内联函数。

  (8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

  19. 如何调试一个没有源码的exe文件调用的dll

  在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名 字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

  20. Visual C++ 6.0工程中的项目文件都表示什么

  .opt:工程关于开发环境的参数文件。如工具条位置等信息。

  .aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。

  .clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候回提示是否重建。

  .dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。

  .dsw(DevelopStudio Workspace):是工作区文件,其他特点和.dsp差不多。

  .plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。

  .hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。

  .mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。

  .bsc:是用于浏览项目信息的,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,这样可以加快编译速度。

  .map是执行文件的映象信息记录文件,除非对系统底层,这个文件一般用不着。

  .pch(Pre-Compiled File):是与编译文件,可以加快编译速度,但是文件非常大。

  .pdb(Program Database):记录了程序有关的一些数据和调试信息,在调试的时候可能有用。

  .exp:只有在编译DLL的时候才会生成,记录了DLL文件的一些信息,一般也没有用。

  .ncb:无编译浏览文件(no compile browser)。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。

原创粉丝点击