用gdb来理解:值传递/指针传递/引用传递

Posted Hsin wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用gdb来理解:值传递/指针传递/引用传递相关的知识,希望对你有一定的参考价值。

1. 常用的gdb命令
1)显示代码 - list
list 显示10行代码
list 1 显示1-10行,再键入list或者回车,显示下面10行代码
list 1,20 显示1-20行

2)设置断点 - break
break 15 在第15行设置断点
break func 在函数func()入口设置断点
info break 显示断点信息
delete 1 删除断点

3)
单步执行 - next/n
单步跟踪 - step/s
s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。

继续运行 - continue

4)打印变量值 - print
print a

5)查看函数堆栈 - backtrace/bt
bt n 显示栈顶n桢(frame)
bt -n 显示栈底n桢(frame)
frame n 显示第n帧的信息
info args 查看某函数栈框里面参数名及值
info locals 查看某函数栈框里面局部变量的值

退出函数 - finish
退出gdb - quit

 

2. 用gdb来理解:值传递/指针传递/引用传递
https://www.cnblogs.com/zjutzz/p/6818799.html

总结:

void myfun(int a)    //传值,产生复制
void myfun(int& a)   //传引用,不产生复制
void myfun(int* a)   //传地址,产生复制,本质上是一种传值,这个值是地址

 

以上是关于用gdb来理解:值传递/指针传递/引用传递的主要内容,如果未能解决你的问题,请参考以下文章

如果指针值作为引用传递,该值的生存期是多久? [复制]

java中值传递和引用传递

Java String 值传递 VS 引用传递

值传递和引用传递的区别

值传递和引用传递怎么理解?

C++:试图理解通过引用传递向量