Skip to content

Commit

Permalink
修改
Browse files Browse the repository at this point in the history
  • Loading branch information
arkingc committed Apr 27, 2018
1 parent d51d8c5 commit 425dd5e
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 0 deletions.
40 changes: 40 additions & 0 deletions C++/C++对象模型实例.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
> 记录gdb调试打印一个类对象的内存分布的方法,方便回顾
<div align="center"> <img src="../pic/g++-version.png"/> </div>

代码如下:

```c++
#include <iostream>

using namespace std;

class Base{
public:
virtual void f() {cout << "Base::f" << endl;}
virtual void g() {cout << "Base::g" << endl;}
virtual void h() {cout << "Base::h" << endl;}
};

class Derived : public Base{
public:
void print() {cout << "Derived::print" << endl;}
};

int main()
{
cout << sizeof(Derived) << endl;
Derived d;
cout << sizeof(d) << endl;

return 0;
}
```

[gdb的使用]()

对象的内存模型,虚函数表,已经虚函数指针信息:

<div align="center"> <img src="../pic/c++-mode-exp-1.png"/> </div>

<div align="center"> <img src="../pic/c++-mode-exp-1.png"/> </div>
54 changes: 54 additions & 0 deletions Linux/Linux常用命令.md
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,60 @@ sudo tcpdump -i lo tcp port 9877
## 3.调试工具:gdb
#### 使用方法
```bash
#第一步:得到可执行文件
gcc/g++ -o 可执行文件 -g 源文件

#第二步:启动gdb
gdb #启动gdb

#第三步:执行gdb命令进行调试
(gdb) gdb命令

gdb命令:
file 可执行文件:导入需要调试的文件
r:运行程序
c:继续执行,直到下一断点或程序结束
b:设置断点
b 行号
b 函数名称
b *函数名
b *代码地址
b 编号
s:执行一行代码,如果此行代码有函数调用则进入函数
n:执行一行代码,如果此行代码有函数调用,不进入函数,直接执行函数
i(info) 子命令:查看某些信息(只输入info或i可以查看有哪些子命令)
list:查看源码
list 行号:查看指定行号附近的源码
list 函数:查看指定函数附近的源码
list 文件:行号:查看指定文件中指定行附近的代码
where:查看当前位置
p(print) /格式 表达式
格式:
x:按十六进制格式显示变量
d:按十进制格式显示变量
u:按十六进制格式显示无符号整形
o:按八进制格式显示变量
t:按二进制格式显示变量
a:按十六进制格式显示变量
c:按字符格式显示变量
f:按浮点数格式显示变量
表达式中可用的操作符:
@:一个和数组有关的操作符,左边是起始地址,右边是长度(p *arr@3)
:::指定一个在文件或是函数中的变量(p 'f2.c'::x)
{<type>}<addr>:一个指向内存<addr>的类型为type的一个对象
x(examine) <n/f/u> <addr>:查看内存
n:正整数,表示需要显示的内存单元个数
f:显示的格式(格式字母同上面的print)
u:每个单元的字节数
b:1字节
h:2字节
w:4字节(默认)
g:8字节
```
## 4.查看依赖库:ldd
## 5.二进制文件分析:objdump
Expand Down
64 changes: 64 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,70 @@

* [《深度探索C++对象模型》](C++/C++对象模型.md)

整形在16/32/64位平台下的大小:

<table>
<tr>
<td rowspan="4" align="center"> <b>16位平台</b> </td>
<td align="center"> char </td>
<td align="center"> 1个字节(8位) </td>
</tr>
<tr>
<td align="center"> short </td>
<td align="center"> 2个字节(16位) </td>
</tr>
<tr>
<td align="center"> <b>int</b> </td>
<td align="center"> 2个字节(16位) </td>
</tr>
<tr>
<td align="center"> long </td>
<td align="center"> 4个字节(32位) </td>
</tr>
<tr>
<td rowspan="5" align="center"> <b>32位平台</b> </td>
<td align="center"> char </td>
<td align="center"> 1个字节(8位) </td>
</tr>
<tr>
<td align="center"> short </td>
<td align="center"> 2个字节(16位) </td>
</tr>
<tr>
<td align="center"> <b>int</b> </td>
<td align="center"> 4个字节(32位) </td>
</tr>
<tr>
<td align="center"> <b>long</b> </td>
<td align="center"> 4个字节(32位) </td>
</tr>
<tr>
<td align="center"> long long </td>
<td align="center"> 8个字节(64位) </td>
</tr>
<tr>
<td rowspan="5" align="center"> <b>64位平台</b> </td>
<td align="center"> char </td>
<td align="center"> 1个字节(8位) </td>
</tr>
<tr>
<td align="center"> short </td>
<td align="center"> 2个字节(16位) </td>
</tr>
<tr>
<td align="center"> int </td>
<td align="center"> 4个字节(32位) </td>
</tr>
<tr>
<td align="center"> <b>long</b>> </td>
<td align="center"> 8个字节(64位) </td>
</tr>
<tr>
<td align="center"> long long </td>
<td align="center"> 8个字节(64位) </td>
</tr>
</table>

C++运算符优先级表:

![](pic/c++-operator.png)
Expand Down
Binary file added pic/c++-mode-exp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added pic/g++-version.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 425dd5e

Please sign in to comment.