C++调试

C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。cpp文件里的东西都是相对独立的,在编译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。

应该记住的一点就是,.h头文件中,只能存在变量或者函数的声明, 而不要放定义。即,只能在头文件中写形如:extern int a;和void f();的句子。这些才是声明。如果写上int a;或者void f() {}这样的句子,那么一旦这个头文件被两个或两个以上的.cpp文件包含的话,编译器会立马报错。

复习一些c++编程内容

数据的封装:面向对象的指导思想就是以对象为中心,就是要以谁做什么来表达程序的逻辑,要将数据的操作都转化为成员函数的调用。 也就是说,对象在程序中的所有操作,都通过调用自己的函数来完成。

数据封装的好处:可以对传入的参数加入条件限制。也可以限制某些数据只读不写。

内联函数:利用关键字inline定义,在编译时,直接将函数体代码和实参代替函数调用语句。类似于直接插入脚本。(结构和逻辑都时比较简单的)

类内定义:在定义一个类的时候,如果将成员函数的函数体,写在类的内部,这样就称为类内定义。(类内定义的成员函数,编译器会优先将其编译成内联函数)

类外定义:成员函数的函数体,写在类的外面。分别为同文件类外定义(成员函数虽然定义在类的外面,但和类的定义在同一个文件当中)和分文件类外定义(大型项目和专业程序员都会采用这种定义方式)。在头文件中,定义了类并且声明类的成员函数,在分文件当中定义类的成员函数。必须将头文件包含入分文件中。

内存分区:

栈区:所定义的变量就存储在栈区。其特点是内存又系统来进行控制,无论是分配还是回收,都不需要程序员来关心。

堆区:是用new来分配的内存,这是需要程序员自己来回收的。

全局区:用来存储全局变量和静态变量。

常量区:存储一些字符串和常量。

代码区:存储编译之后的代码。

对象的初始化:分为两种(1)有且仅有一次的初始化(2)根据条件初始化

构造函数:用来初始化。将初始化代码写在构造函数内,就可以起到初始化的作用,构造函数在对象实例化时被自动调用(被调用,且仅被调用一次)。初始化函数要与类同名,且构造函数没有返回值,不用写void。在实例化对象时,不需要传递参数的构造函数称为默认构造函数。

初始化列表:在构造函数中是用,例如

clas Student
{
public:
    Student():m_strName("Jim"),m_iAge(10){}
private:
    string m_strName;
    int m_iAge;
};

初始化列表特性:(1)初始化列表先于构造函数执行(2)初始化列表只能用于构造函数(3)初始化列表可以同时初始化多个数据成员。

初始化列表的必要性:比如某一个const常量,如何去给其赋值呢,就需要用到初始化列表了。 

拷贝构造函数:通过同类型的对象实例化另外的对象时,自动调用拷贝构造函数。当没有自定义拷贝构造函数的时候,系统会自动生成一个拷贝构造函数。

析构函数:用于归还系统资源,收拾最后的残局。释放掉所占用的内存。析构函数不允许传递参数,也就不允许重载。

析构函数:如果没有自定义析构函数,则系统自动生成一个析构函数。在对象销毁时自动调用。

头文件中尖括号<>和双引号“”的区别:

<>尖括号是从默认库中搜索;而“”双引号是从当前文件目录下搜素。

时间: 2024-11-13 11:29:28

C++调试的相关文章

Linux下GDB调试与对拍(先挖个坑)

应为NOIP要复赛在NOI-Linux下编写程序,所以被迫选择Vim+Gdb(主要是Guide太丑了). 虽然GUIDE的调试功能已经对付大多数的调试,反正学一学GDB的使用也没什么坏处. 1 生成调试信息 要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: gcc -g hello.c -o hello g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,

微信开发之本地接口调试(非80端口,无需上传服务器服务器访问

前言: 本文是总结在开发微信接口时,为方便开发所采取的一些快捷步骤,已节省开发人员难度开发时间从而提高开发效率. 本地测试: (提醒,在本地模拟微信get或post数据时先将校验参数注释掉) 利用微信模拟器weixinPost进行模拟发送xml数据 由于这个软件是微信没公开高级接口时公布的,所以对于高级接口的调试,笔者利用的是Fiddler这个抓包工具模拟post数据 高端测试: 利用反向代理软件ngrok访问本地项目: ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之

PHPStorm调试PHP代码~实际操作+mark~~

因为wamp自己已经下载了xdebug,只要配置开启就行了. 1. 配置php.ini(有就打开注释,没有就加上) XDEBUG Extension[xdebug]zend_extension ="D:/wamp64/bin/php/php5.6.25/zend_ext/php_xdebug-2.4.1-5.6-vc11-x86_64.dll"xdebug.remote_enable = 1;远程主机xdebug.remote_host = localhost;主机端口xdebug.r

Tomcat配置远程调试端口(windows、Linux)

当我们需要定位生产环境问题,而日志又不清晰的情况下,我们可以借助Tomcat提供的远程调试,设置如下: // Linxu系统: apach/bin/startup.sh开始处中增加如下内容: declare -x CATALINA_OPTS="-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8081" // Windows系统:

Android APP 调试过程中遇到的问题。

调试过过程中APP安装完启动后有的时候会异常退出,报这个错误.有的时候可以直接启动.查找不到原因.网上说把commit方法替换成commitAllowingStateLoss() 也无效. Android APP 调试过程中遇到的问题. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007192169/AndroidAPP调试过程中遇到的问题.html

Linux-hexdump命令调试event驱动—详解(13)

hexdump: 查看文件的内容,比如二进制文件中包含的某些字符串,通常用来调试驱动用 1.调试 键盘驱动 讲解 当我们insmod挂载了键盘驱动后,找到键盘驱动被放在event1设备里, 此时没有按键按下,所以event1里面的数据是没有的,那么数据又是从来哪里来? 通过键盘驱动的read函数,若有按键按下,就会上传按键数据给用户层,此时的用户层就是hexdump 因为键盘驱动的input_handler 是:evdev_handler 所以键盘驱动的read函数是: evdev_handle

调试信息的完成

gdb中-x是为了实现通过文件的初始化gdb GAS(gcc)(AT&T 语法),NASM(Intel 语法) 当boot loader 引导操作系统的时候,机器必须有如下的状态: EAX: 必须包含魔数OX2BADB002,这个值告诉操作系统目前它是由兼容的Multiboot 的boot loader 引导的. EBX: 必须包含boot loader 提供的多重引导信息结构(见3.3 节多重信息引导结构)的32位物理地址. CS: 必须是32 位的读/执行的代码段,偏移是0 以及界限是 0X

gdb调试

[前言]使用gdb调试前,在编译程序时,要加 -g 选项,否则你将看不见程序的函数名.变量名,所代替的全是运行时的内存地址. 1.开始调试 a.  gdb <program> program也就是你的执行文件,一般在当前目录下. b. gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件. 2.[列出源码],从第n行开始(编译时要加 -g 选项) l n 3.[设置断点]在第N行加断点 break

WebPack+WebStorm调试

怎么用webstorm来调试WebPack? 今天查了很多文档,最终在官网上耐心看完英文文档后,才解决.附上链接:https://blog.jetbrains.com/webstorm/2015/09/debugging-webpack-applications-in-webstorm/ 工具简介 Windows7 WebStorm2017 Webpack2 谷歌浏览器(默认浏览器) 操作 在Project视图里找到index.html,右击进入Debug模式 WebStrom会自动进入Debu

VS2013 VS2015 VS2017调试出现无法启动iis express web服务器

最近老是遇到这个问题,天天如此,烦死人,网上答案繁多,但是都解决不了,也是由于各种环境不同导致的,这里把几种解决方法都记录下 一.其他项目都可以,就这么一个不行 因为其他项目都可以,就这么一个不行,所以基本就是配置问题,网上的办法都试了,我试了都没用,现在说说我的解决办法 用记事本或者其他什么文本编辑器,打开项目的.csproj文件,定位到<WebProjectProperties>,把关于IIS的配置<DevelopmentServerPort>.<DevelopmentS