MFC应用程序调用顺序分析
2014-02-19 10:53
369 查看
开发环境:Visual Studio 2010
了解一个程序的调用关系和调用顺序,对一个编程人员来说是有必要的。下面将会以《Visual
Studio 2010——第一个Visual C++.NET程序》为例子进行分析。
首先,通过“类视图”查看本项目所包含的类,如图1所示。
图1 类视图
由图1可见,本项目主要的类有5个,其中和项目名称First直接相关的有3个,分别是CFirstApp、CFirstDocC和FirstView。只要知道这几个类的创建顺序,就可以知道本程序大致的运行流程。为了达到这个目的,可以在每个类的构造函数中设置断点,然后调试程序。
利用“解决方案资源管理器”查看本项目的头文件和源文件,如图2所示。
图2 解决方案资源管理器
通过查看图2中的各个头文件,可以知道图1中后面4个类分别在这些头文件中定义了,图2中的源文件则是对应于各个头文件的函数的实现。因此,可以在各个.cpp文件中的找到图1中后面4个类的构造函数,在里面添加断点,如图3所示。
图3 设置断点
设置好断点后,在菜单中选择“调试”》“启动调试”,如图4所示。
图4 启动调试
启动调试后,遇到第一个断点即会停止运行,这时记下是在那个构造函数中停止。然后,选择菜单“调试”》“继续”来继续调试,如图5,并且记下下一个停止的位置。如此直到运行完整个程序。
图5 继续调试
经过调试发现,各个类的创建顺序是:CFirstApp、CFirstDoc、CMainFrame、CFirstView。所以可以得出结论:在图2所有.cpp文件中,入口是First.cpp源文件,也即是和项目名同名的源文件!
然而,需要注意的是,First.cpp并不是整个工程中第一个得到执行的源文件。经过单步调试发现,第一个得到执行的源文件是appmodul.cpp,其次是其它一些在图2中所见不到的源文件,甚至在图2中的“外部依赖项目”中也找不到!经过查找发现,appmodul.cpp是在..Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc中的一个源文件,这说明它是MFC的一个组成部分,而且是很底层的一部分,它在First.cpp之前运行。可推测,对于不同的项目,都是必须先运行appmodul.cpp,而且都是同一个appmodul.cpp!MFC程序的真正入口,参见《Visual
Studio 2010——创建新项目》。
了解一个程序的调用关系和调用顺序,对一个编程人员来说是有必要的。下面将会以《Visual
Studio 2010——第一个Visual C++.NET程序》为例子进行分析。
首先,通过“类视图”查看本项目所包含的类,如图1所示。
图1 类视图
由图1可见,本项目主要的类有5个,其中和项目名称First直接相关的有3个,分别是CFirstApp、CFirstDocC和FirstView。只要知道这几个类的创建顺序,就可以知道本程序大致的运行流程。为了达到这个目的,可以在每个类的构造函数中设置断点,然后调试程序。
利用“解决方案资源管理器”查看本项目的头文件和源文件,如图2所示。
图2 解决方案资源管理器
通过查看图2中的各个头文件,可以知道图1中后面4个类分别在这些头文件中定义了,图2中的源文件则是对应于各个头文件的函数的实现。因此,可以在各个.cpp文件中的找到图1中后面4个类的构造函数,在里面添加断点,如图3所示。
图3 设置断点
设置好断点后,在菜单中选择“调试”》“启动调试”,如图4所示。
图4 启动调试
启动调试后,遇到第一个断点即会停止运行,这时记下是在那个构造函数中停止。然后,选择菜单“调试”》“继续”来继续调试,如图5,并且记下下一个停止的位置。如此直到运行完整个程序。
图5 继续调试
经过调试发现,各个类的创建顺序是:CFirstApp、CFirstDoc、CMainFrame、CFirstView。所以可以得出结论:在图2所有.cpp文件中,入口是First.cpp源文件,也即是和项目名同名的源文件!
然而,需要注意的是,First.cpp并不是整个工程中第一个得到执行的源文件。经过单步调试发现,第一个得到执行的源文件是appmodul.cpp,其次是其它一些在图2中所见不到的源文件,甚至在图2中的“外部依赖项目”中也找不到!经过查找发现,appmodul.cpp是在..Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc中的一个源文件,这说明它是MFC的一个组成部分,而且是很底层的一部分,它在First.cpp之前运行。可推测,对于不同的项目,都是必须先运行appmodul.cpp,而且都是同一个appmodul.cpp!MFC程序的真正入口,参见《Visual
Studio 2010——创建新项目》。
相关文章推荐
- angular + easyui 做界面验证
- 欢迎进入Flask大型教程项目!
- Hibernate -- Session的主键生成策略
- 智者遇事求心,庸者遇事求境
- 标签开案例
- Linux下常用命令
- [置顶] Flex Builder3 安装SVN插件
- CAMdiaTimingFunction 用法
- linux 下VLAN数据包格式
- 现在(2013)多少的工资才要交税?税率是多少?
- 春季高发的皮肤病有哪些
- 堆排序
- LINUX adb devices no permissions 解决办法
- 【管理心得之十二】拿什么来拯救你我的“协力人员” (后篇)
- ffmpeg 通过通过组播发送本地TS流文件
- 使用CocoaPods管理iOS的第三方类库
- 关于判断web是手机端还是电脑端访问以及复制删除按钮的实现
- CentOS安装JAVA
- Linux上面Oracle相关命令
- JQuery 选择器、过滤器介绍