- 浏览: 1400062 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
这里只是一个摘要。具体的细节还需要去看manual。
1 info 用来描述你的程序的状态,比如info b就是显示出当前的程序的所有断点.
2 set 用来设置一些环境变量的值,比如set prompt $.
3 show用来描述gdb自己的状态.
编译要用-g选项.
然后用gdb +程序名,或者直接gdb后,用file + 文件名加载程序.
1 run/r 运行程序.
2 set args 设置程序的参数.
3 path directory 加一个目录到环境变量path
4 set directory 设置gdb的工作目录
5 pwd 当前的工作目录
6 attch process-id 调试 运行的进程
dettach 当调试进程完毕,release 掉gdb的控制.
调试多线程.
1 thread threadno 选择当前的线程.
2 info thread 查看当前程序的线程.
debug多进程:
默认情况下,当fork一个子进程之后,gdb会继续debug父进程,而子进程会运行下去.不过我们能够改变这个.
set follow-fork-mode mode 这里mode可以为parent或者child. parent是默认值,而child的话就是gdb继续debug子进程,而父进程会运行下去.
如果你想要同时debug父子进程,也可以设置:
set detach-on-fork mode 默认是on,也就是只能debug一个进程,如果改为off则可以同时debug父子进程.
保存一个书签稍后返回.
checkpoint 保存当前的程序的状态.
restart checkpoint-id 返回到checkpoint-id那个点.这个值可以用info checkpoint来查看
breakpoint,watchpoint以及catchpoint
breakpoint 就是断点.
watchpoint 就是用来检测变量的改变,他可以看做是特殊的断点,也就是当变量改变时停止程序.
catchpoint 是另外一种特殊的断点,用来监测某一事件的发生,有点类似其它语言中的异常.
1 设置Breakpoint
break location 设置断点.location可以为行号,函数名或者指令地址.
break 设置断点,不过这个断点为当前栈帧的下一条指令.
break location if condition 当condition为真时,程序到达这个断点才起作用.
tbreaks args, 一次性的断点.
rbreaks regex 设置断点在所有与regex匹配的函数.这个正则表达式的语义与grep的相同.
2 设置watchpoint
watch expr[thread threadno] 设置检测变量expr,后面可以跟着改变这个变量的线程.如果跟着线程号,则说明只有当这个线程改变变量时,程序才会stop.
rwatch expr[thread threadno] 上面是监测变量改变,而这个命令是监测程序读取变量.
awatch expr[thread threadno] 当expr要么被读,要么被写时,程序直接break.
3 设置catchpoint
catch event 当event发生的时候程序停止.
event可以是下面的几种类型: throw ,catch,exception,exception unhandled,assert,exec,fork,vfork.
tcatch event 一次性的监测事件.
删除断点
clear 删除在当前的栈帧的将要被执行的下一条指令断点.
clear location 删除location位置的断点.其实更有用的是下面几个命令:
clear function,clear filename:function ,clear linenum,clear filename:linenum.
delete [breakpoints][range...] 其实也就是删除多个断点,如果没有range,咋就是删除全部断点.
关闭断点
一个断点(包括 watchpoint和catchpoint)可以有下面四种状态.
打开,关闭,enabled once,enabled for deletion
disable [breakpoints][range..] 关闭指定的断点或者全部断点(如果没有range)
enable [breakpoints][range..] 打开指定的断点或者全部断点(如果没有range)
enable [breakpoints] once range 临时打开指定的断点(也就是说是一次性的,.
enable [breakpoints] delete range 临时打开指定的断点并只工作一次,也就是一次之后这个断点将会被删除.
break condition
contidition bnum expression 当expression为真的时候,程序到达这个断点才会停止.
contidition bnum 从断点bnum删除掉一个condition.
ignore bnum count 设置一个断点bnum的忽略次数为count.也就是只有count次数后,这个断点才会起作用.
断点命令列表
这个主要是用来当到达这个断点,程序停止后,你想要执行一连串的命令.格式为:
指定一堆命令给断点bnum.如果想删除命令的话就把command-list置为空就行了.
如果没有bnum,则这个command指的是最后设置的一个断点.
这里有个例子:
接下来来看continue和step
continue表示让程序继续执行,直到下一个断点或者执行完毕。
step表示让程序执行一行代码或者说一条机器指令(依赖于你选择的命令)。
下面来看命令:
这几个命令都是resume一个程序,然后参数ignore-count表示忽略当前这个断点的次数。
step [count]
继续运行程序直到抵达一个新的代码行(它会跟入函数).这里要记住step只会停止在source line的第一条指令。
如果加上count参数则表示它会step count次。如果遇到断点则会停止。
next [count]
和step很类似,区别就是不会跟进函数。
on就可以使step停止在没有debug信息的函数的第一条指令上。off则是直接执行完这个函数。
这里要注意上面的命令都只是跳一行代码。而不是一条指令。
util 继续运行直到source line通过了当前的行。这个命令主要是针对循环语句中的step。比如你在循环结尾设置util,则只有当循环退出时才会在这个断点停止。而不是每次都停止。
util location 继续运行直到指定的location,或者当前的栈帧返回。
advance location 继续运行直到给定的location,这个相比与上面的命令,它就象全局的。
stepi [arg]
执行一条机器指令。 arg表示次数。
nexti [arg]
和next类似只不过执行的是一条机器指令。
下来来看信号。
gdb可以监测在你的程序中的任何信号。
来看命令。
handle signal [keywords...]
这个命令用来改变信号signal(名字或者数字)在gdb中的行为。
其中关键就是keywords.在这里keywords可以为下面几种类型:
1 nostop gdb接收到信号不会停止程序,而只是打印出一段message
2 stop 和上面类似只不过会停止程序。
3 print 当信号发生必须打印一条消息通知。
4 noprint 信号发生,gdb将不会打印任何东西。
5 pass和noignore 这两个是同义的。表示信号对你的程序是可见的。
6 nopass和ignore 这两个也是同义的。和上面相反。。
在gdb中,当你的程序由于一个信号而停止后,直到你继续执行,否则信号对你的程序是不可见得。也就是说当gdb捕捉到信号,我们可以用nopass或者ignore来使信号对我们的程序为不可见。
最后来看下多线程程序的调试。
首先来看多线程调试的几种模式。
1 all-stop模式。
在这种模式中,当你的程序在gdb由于任何原因而停止,此时所有的线程都会停止。而不仅仅是当前的线程。一般来说gdb不能单步所有的线程。因为线程调度gdb是无法控制的。无论什么时候当gdb停止你的程序,它都会自动切换到触发断点的那个线程。
在一些os中我们可以通过lock线程调度器,从而达到只有一个线程在运行。
set scheduler-locking mode
设置模式,如果mode是off,则表示没有lock,则任何线程在任何时候都有可能在运行。当mode为on的时候,锁定其他的线程,也就是只有当前线程在执行。也就是你单步的时候其他线程是不会运行的。这个对我们只关注本线程比较重要。
默认情况下,当你键入step或者next命令时,gdb只允许当前进程的线程运行。我们可以通过命令来修改这个默认值。
set schedule-multiple mode
当mode为on则所有进程的所有线程都匀许运行。否则只有当前的进程的线程能够resume。
2 none-stop模式。
顾名思义,当程序在gdb中停止,只有当前的线程会被停止,而其他的线程将会继续运行。
这个时候step,next这些命令就只对当前的线程起作用。
我们要打开这个模式需要这样操作:
这里要注意打开这个模式必须得在你attach或运行这个程序或者进程之前才能进行。
Background Execution
gdb执行命令有两种类型:前台的(同步)和后台(异步)的。
区别很简单,前台的话,gdb在输出提示符之前会等待程序report一些线程已经终止的信息。而异步的则是直接返回。
我们需要显式打开异步模式。
set target-async on
下面就是支持异步的命令:
通过上面我们可以看到异步模式主要用在none-stop模式中。
如果你想停止后台运行的程序,那么使用interrupt
在all-stop模式中interrupt将会停止所有的线程。而在none-stop中只会停止当前线程。interrupt -a此时就能停止所有线程。’
当你有多个线程,你此时只想给某个线程设置断点,这个时候可以用这个命令:
break linespec thread threadno
break linespec thread threadno if ...
linespec为源码行号,threadno为线程id。
最后来看下多线程调试中可能会遇到的一个问题:
如果一个线程在一个断点,或者由于其他什么原因停止,此时另外的线程阻塞在一个系统调用。这个时候这个系统调用就有可能会过早的返回。因此我们在调用系统调用,最好都要检测它的返回值。
举个例子:
sleep (10);
这个我们应该改成这样:
1 info 用来描述你的程序的状态,比如info b就是显示出当前的程序的所有断点.
2 set 用来设置一些环境变量的值,比如set prompt $.
3 show用来描述gdb自己的状态.
编译要用-g选项.
然后用gdb +程序名,或者直接gdb后,用file + 文件名加载程序.
1 run/r 运行程序.
2 set args 设置程序的参数.
3 path directory 加一个目录到环境变量path
4 set directory 设置gdb的工作目录
5 pwd 当前的工作目录
6 attch process-id 调试 运行的进程
dettach 当调试进程完毕,release 掉gdb的控制.
调试多线程.
1 thread threadno 选择当前的线程.
2 info thread 查看当前程序的线程.
debug多进程:
默认情况下,当fork一个子进程之后,gdb会继续debug父进程,而子进程会运行下去.不过我们能够改变这个.
set follow-fork-mode mode 这里mode可以为parent或者child. parent是默认值,而child的话就是gdb继续debug子进程,而父进程会运行下去.
如果你想要同时debug父子进程,也可以设置:
set detach-on-fork mode 默认是on,也就是只能debug一个进程,如果改为off则可以同时debug父子进程.
保存一个书签稍后返回.
checkpoint 保存当前的程序的状态.
restart checkpoint-id 返回到checkpoint-id那个点.这个值可以用info checkpoint来查看
breakpoint,watchpoint以及catchpoint
breakpoint 就是断点.
watchpoint 就是用来检测变量的改变,他可以看做是特殊的断点,也就是当变量改变时停止程序.
catchpoint 是另外一种特殊的断点,用来监测某一事件的发生,有点类似其它语言中的异常.
1 设置Breakpoint
break location 设置断点.location可以为行号,函数名或者指令地址.
break 设置断点,不过这个断点为当前栈帧的下一条指令.
break location if condition 当condition为真时,程序到达这个断点才起作用.
tbreaks args, 一次性的断点.
rbreaks regex 设置断点在所有与regex匹配的函数.这个正则表达式的语义与grep的相同.
2 设置watchpoint
watch expr[thread threadno] 设置检测变量expr,后面可以跟着改变这个变量的线程.如果跟着线程号,则说明只有当这个线程改变变量时,程序才会stop.
rwatch expr[thread threadno] 上面是监测变量改变,而这个命令是监测程序读取变量.
awatch expr[thread threadno] 当expr要么被读,要么被写时,程序直接break.
3 设置catchpoint
catch event 当event发生的时候程序停止.
event可以是下面的几种类型: throw ,catch,exception,exception unhandled,assert,exec,fork,vfork.
tcatch event 一次性的监测事件.
删除断点
clear 删除在当前的栈帧的将要被执行的下一条指令断点.
clear location 删除location位置的断点.其实更有用的是下面几个命令:
clear function,clear filename:function ,clear linenum,clear filename:linenum.
delete [breakpoints][range...] 其实也就是删除多个断点,如果没有range,咋就是删除全部断点.
关闭断点
一个断点(包括 watchpoint和catchpoint)可以有下面四种状态.
打开,关闭,enabled once,enabled for deletion
disable [breakpoints][range..] 关闭指定的断点或者全部断点(如果没有range)
enable [breakpoints][range..] 打开指定的断点或者全部断点(如果没有range)
enable [breakpoints] once range 临时打开指定的断点(也就是说是一次性的,.
enable [breakpoints] delete range 临时打开指定的断点并只工作一次,也就是一次之后这个断点将会被删除.
break condition
contidition bnum expression 当expression为真的时候,程序到达这个断点才会停止.
contidition bnum 从断点bnum删除掉一个condition.
ignore bnum count 设置一个断点bnum的忽略次数为count.也就是只有count次数后,这个断点才会起作用.
断点命令列表
这个主要是用来当到达这个断点,程序停止后,你想要执行一连串的命令.格式为:
command [bnum] ... command-list .. end
指定一堆命令给断点bnum.如果想删除命令的话就把command-list置为空就行了.
如果没有bnum,则这个command指的是最后设置的一个断点.
这里有个例子:
break 403 commands ///不输出任何东西 silent ///改变x的值 set x = y + 4 ///然后continue cont end
接下来来看continue和step
continue表示让程序继续执行,直到下一个断点或者执行完毕。
step表示让程序执行一行代码或者说一条机器指令(依赖于你选择的命令)。
下面来看命令:
continue [ignore-count] c [ignore-count] fg [ignore-count]
这几个命令都是resume一个程序,然后参数ignore-count表示忽略当前这个断点的次数。
step [count]
继续运行程序直到抵达一个新的代码行(它会跟入函数).这里要记住step只会停止在source line的第一条指令。
如果加上count参数则表示它会step count次。如果遇到断点则会停止。
next [count]
和step很类似,区别就是不会跟进函数。
set step-mode set step-mode on set step-mode off
on就可以使step停止在没有debug信息的函数的第一条指令上。off则是直接执行完这个函数。
这里要注意上面的命令都只是跳一行代码。而不是一条指令。
util 继续运行直到source line通过了当前的行。这个命令主要是针对循环语句中的step。比如你在循环结尾设置util,则只有当循环退出时才会在这个断点停止。而不是每次都停止。
util location 继续运行直到指定的location,或者当前的栈帧返回。
advance location 继续运行直到给定的location,这个相比与上面的命令,它就象全局的。
stepi [arg]
执行一条机器指令。 arg表示次数。
nexti [arg]
和next类似只不过执行的是一条机器指令。
下来来看信号。
gdb可以监测在你的程序中的任何信号。
来看命令。
handle signal [keywords...]
这个命令用来改变信号signal(名字或者数字)在gdb中的行为。
其中关键就是keywords.在这里keywords可以为下面几种类型:
1 nostop gdb接收到信号不会停止程序,而只是打印出一段message
2 stop 和上面类似只不过会停止程序。
3 print 当信号发生必须打印一条消息通知。
4 noprint 信号发生,gdb将不会打印任何东西。
5 pass和noignore 这两个是同义的。表示信号对你的程序是可见的。
6 nopass和ignore 这两个也是同义的。和上面相反。。
在gdb中,当你的程序由于一个信号而停止后,直到你继续执行,否则信号对你的程序是不可见得。也就是说当gdb捕捉到信号,我们可以用nopass或者ignore来使信号对我们的程序为不可见。
最后来看下多线程程序的调试。
首先来看多线程调试的几种模式。
1 all-stop模式。
在这种模式中,当你的程序在gdb由于任何原因而停止,此时所有的线程都会停止。而不仅仅是当前的线程。一般来说gdb不能单步所有的线程。因为线程调度gdb是无法控制的。无论什么时候当gdb停止你的程序,它都会自动切换到触发断点的那个线程。
在一些os中我们可以通过lock线程调度器,从而达到只有一个线程在运行。
set scheduler-locking mode
设置模式,如果mode是off,则表示没有lock,则任何线程在任何时候都有可能在运行。当mode为on的时候,锁定其他的线程,也就是只有当前线程在执行。也就是你单步的时候其他线程是不会运行的。这个对我们只关注本线程比较重要。
默认情况下,当你键入step或者next命令时,gdb只允许当前进程的线程运行。我们可以通过命令来修改这个默认值。
set schedule-multiple mode
当mode为on则所有进程的所有线程都匀许运行。否则只有当前的进程的线程能够resume。
2 none-stop模式。
顾名思义,当程序在gdb中停止,只有当前的线程会被停止,而其他的线程将会继续运行。
这个时候step,next这些命令就只对当前的线程起作用。
我们要打开这个模式需要这样操作:
# Enable the async interface. set target-async 1 # If using the CLI, pagination breaks non-stop. set pagination off # Finally, turn it on! set non-stop on
这里要注意打开这个模式必须得在你attach或运行这个程序或者进程之前才能进行。
Background Execution
gdb执行命令有两种类型:前台的(同步)和后台(异步)的。
区别很简单,前台的话,gdb在输出提示符之前会等待程序report一些线程已经终止的信息。而异步的则是直接返回。
我们需要显式打开异步模式。
set target-async on
下面就是支持异步的命令:
run attach step stepi next nexti continue finish until
通过上面我们可以看到异步模式主要用在none-stop模式中。
如果你想停止后台运行的程序,那么使用interrupt
在all-stop模式中interrupt将会停止所有的线程。而在none-stop中只会停止当前线程。interrupt -a此时就能停止所有线程。’
当你有多个线程,你此时只想给某个线程设置断点,这个时候可以用这个命令:
break linespec thread threadno
break linespec thread threadno if ...
linespec为源码行号,threadno为线程id。
最后来看下多线程调试中可能会遇到的一个问题:
如果一个线程在一个断点,或者由于其他什么原因停止,此时另外的线程阻塞在一个系统调用。这个时候这个系统调用就有可能会过早的返回。因此我们在调用系统调用,最好都要检测它的返回值。
举个例子:
sleep (10);
这个我们应该改成这样:
int unslept = 10; while (unslept > 0) unslept = sleep (unslept);
发表评论
-
gcc的几个自动优化
2009-11-10 00:44 5142我的gcc版本是4.4.1 先来看const和define以 ... -
ydb的内存模型
2009-09-06 18:02 1977阿宝同学推荐了这个东 ... -
glibc中strlen的实现
2009-08-04 09:10 4525glibc中的strlen的实现主要的思想就是每次检测4个字节 ... -
libevent源码浅析(四)
2009-05-15 23:02 4426最近刚刚一个项目自己用libevent,因此这几天又把libe ... -
libevent源码浅析(三)
2009-03-17 00:08 4579这次我们来看libevent的信号的处理。 在libeven ... -
libevent源码浅析(二)
2009-02-22 00:11 4074我们来看下libevent的定时器的实现 在libevent ... -
libevent源码浅析(一)
2009-02-14 13:23 7432这里分析的是libevent-1.4.9。 PS:前面还看了 ... -
linux下的time处理
2009-01-04 18:02 6841在内核中有3个不同的时间: Wall time(real t ... -
libev简单使用介绍
2008-12-30 09:52 11547更详细的用法请看他的 ... -
linux下的elf结构
2008-12-12 00:20 5186可以看到链接器和加载器看待elf是完全不同的,链接器看到 ... -
php的c扩展
2008-12-07 18:24 4570在php中最核心的一个数据结构就是这个: typedef u ... -
linux下的管理内存相关的函数
2008-11-27 00:56 4484malloc的实现,在linux下的实现是这样的,当所需 ... -
linux下的数据对齐
2008-11-25 12:15 3646数据对齐也就是通过硬件来估算在数据的地址和内存块之间的联系。当 ... -
linux下检测ip冲突
2008-11-16 20:18 8172原理其实很简单,那就是广播一个arp包,然后recv,如果没有 ... -
今天碰到的一个问题
2008-10-29 22:33 1264将位图用 bmptopnm 转成pcl6的打印语言,然后直接c ... -
ftruncate和msync
2008-10-23 22:10 3498int ftruncate(int fd, off_t le ... -
GUN C正则表达式
2008-09-25 23:47 6192最近项目中要处理文本,因此就用了gun的正则表达式,它是pos ... -
看代码看的头晕
2008-09-06 01:04 1867最近工作需要在看ghostscript的代码,看得我头晕眼花, ... -
[转帖]MISRA--作为工业标准的C编程规范
2008-08-21 13:19 2833本文档转贴自孟岩的blog ... -
代码大全读书笔记1
2008-04-26 19:16 3823这么好的书,觉得写点东西,记录一下比较好。 4.1选择编程语 ...
相关推荐
总结来说,这份学习笔记为学习Go语言的读者提供了一个详尽的路线图,从基础语法、函数、数据结构到并发编程,再到深入理解标准库和高级特性,循序渐进地指导读者掌握Go语言。这些知识点对于想要深入学习Go语言的...
【linux学习笔记-1】使用GDB调试简单的用户程序 【linux学习笔记-2】父子进程共享文件描述符 【linux学习笔记-3】文件操作(stat,chmod,umask) 【linux学习笔记-4】进程扇和进程链 【linux学习笔记-5】编写自己的ls...
【linux学习笔记-1】使用GDB调试简单的用户程序.doc 【linux学习笔记-2】父子进程共享文件描述符.doc 【linux学习笔记-3】文件操作(stat,chmod,umask).doc 【linux学习笔记-4】进程扇和进程链.doc 【linux学习笔记-...
Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了...通过本学习笔记的内容,我们可以对Go语言有一个全面而系统的认识,为深入学习和应用Go语言打下坚实的基础。
### gdb调试器命令学习总结 #### 一、简介 GDB (GNU Debugger) 是Linux下的一款强大而灵活的调试工具,适用于C/C++程序的调试。通过GDB,开发人员可以轻松地设置断点、单步执行代码、监控变量值等,从而帮助他们...
Linux学习笔记 本文档主要记录了 Linux ...本文档记录了 Linux 操作系统的学习笔记,涵盖了 Basic 的编程、VI 编辑器的使用、GCC 编译器的应用、GDB 调试工具的使用等方面的知识点,为读者提供了一个系统的学习指南。
在学习笔记的附录部分,编者还添加了对Go工具集的介绍,比如条件编译、跨平台编译、调试工具GDB的使用,以及Go测试相关知识,包括单元测试、数据竞争测试、基准测试和代码覆盖率测试。 总的来说,Go语言学习笔记...
这份"C++学习笔记"涵盖了C++的基础到高级概念,旨在帮助初学者和有一定经验的程序员深入理解并掌握C++。 在C++的学习过程中,以下几个关键知识点是不可或缺的: 1. **基础语法**:C++起源于C语言,因此它保留了...
学习笔记可能涵盖了如何开发自定义插件、编写脚本,以及使用调试工具如GDB进行问题排查。 8. **安全与隐私保护**: 如何通过OpenWrt设置安全策略,包括加密无线网络、限制非法访问、防止DDoS攻击等。 9. **故障...
Go 学习笔记, 第 4 版 4.4 Struct 47 第 5 章 ⽅法 53 5.1 ⽅法定义 53 5.2 匿名字段 54 5.3 ⽅法集 56 5.4 表达式 56 第 6 章 接⼝ 60 6.1 接⼝定义 60 6.2 执⾏机制 62 6.3 接⼝转换 63 6.4 接⼝技巧 65 第 7 章 ...
《新手C++学习笔记》是一份专为编程初学者打造的资源,旨在帮助那些刚刚踏入C++编程领域的“菜鸟”快速成长。这份笔记包含了前辈们的实践经验总结,具有很高的学习价值。文档以.doc格式存储,方便读者使用常见的文字...
通过上述内容,可以了解到《雨痕golang学习笔记第四版 加上书签版》为Go语言学习者提供了一套结构化、深入浅出的学习资料,无论对于初学者还是希望深入掌握Go语言的开发人员,都是一本难得的参考书。
这篇学习笔记将带你走进ARM汇编的世界,理解其基本概念,掌握指令集,并学会如何在实际应用中运用。 一、ARM架构概述 ARM(Advanced RISC Machines)架构是一种广泛应用于移动设备、嵌入式系统和个人电脑的精简指令...
这篇Linux学习笔记涵盖了Linux的基础知识,包括C和C++编程环境,是初学者深入了解Linux的宝贵资源。 首先,让我们来探讨Linux的常用命令。在Linux的世界里,一切皆文件,包括硬件设备。掌握基本的命令行操作是至关...
Go+学习笔记中还介绍了各种工具的使用,如命令行工具、GDB调试、条件编译、跨平台编译、程序测试和开发工具等,这些都是提升开发效率和程序质量的重要工具。 进阶部分则包含了Go语言运行时的深入探讨、内存分配和...
【Java学习笔记】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems开发,现在由甲骨文公司维护。它的设计目标是提供平台无关性,这意味着Java编写的代码可以在任何支持Java虚拟机(JVM)的设备上运行...
Go 语言编程 + Go 学习笔记, 第 部分 语 第 1 章 类型 1.1 变量 1.2 常量 1.3 基本类型 1.4 引 类型 1.5 类型转换 1.6 字符串 1.7 指针 1.8 定义类型 第 2 章 表达式 2.1 保留字 2.2 运算符 2.3 初始化 2.4 控制流 ...
### Go语言学习笔记知识点梳理 #### 一、Go语言基础 **1.1 变量** - **定义**: 在Go语言中,变量是用于存储数据的基本单元。可以通过`var`关键字来声明变量,或者使用短变量声明`:=`在一行内声明并赋值。 - **...
而“gdb调试.txt”则很可能是一个详细的GDB使用教程或笔记,涵盖了GDB的基本命令和高级特性。例如,它可能讲解了以下内容: 1. **启动和连接**:如何启动GDB并加载目标程序,以及如何通过GDB连接到远程设备上的GDB...