关于在Linux系统中的gdb命令知识

说实话,使用 gdb 需要一些耐心,但是一旦掌握了它的窍门,就好像有了额外的视角一样。
当我第一次开始乱搞时,我对很多令人困惑的错误消息感到困惑。
后来我发现,在编译参数中添加 -g 立即解决了不止一个级别的问题。

有趣的是,list 命令很容易使用。
例如,上次调试net库函数时,可以直接输入l netlib.c:4 5 来查看具体的代码块,这比文件导航要高效得多。
但需要注意的是,当不添加参数时,无论光标在哪里,列表都会显示相邻的代码。
有时主要逻辑会丢失,因此习惯上添加 -l 并向下滚动几次以确定。

break命令是内核的核心。
我倾向于在设置断点之前打印函数的返回值,以确保断点位于需要的位置。
记得有一次写线程安全代码的时候,忘记加锁,提交了。
幸运的是,我设置了break 1 00,一步步到达有问题的行,直接看到两个线程同时更改同一个变量。
在这种情况下,下一步和下一步之间的区别非常重要。
然后它通过函数调用,步骤就会进来,最小的改变可以产生很大的差异。

多线程调试是gdb的必考点。
上次调试消息队列崩溃案例时,infothreads直接显示了所有线程的CPU使用率和状态。
最神奇的是threadapplyall,它可以一次性向所有线程发出命令。
比如我停止所有线程,然后使用线程一一循环,最后找到并发问题。
这很容易。

但请注意,如果使用过多,线程命令很容易变得混乱。
刚开始做的时候,线程2 改成了线程1 2 ,直接导致了调试对象错误。
幸好我及时用BT查看了堆栈并弄清楚了。
还有关闭选项卡。
特别是在分析死锁场景时,闪存模式可以帮助您冻结所有干扰线程并简单地查看当前线程的执行路径。

编辑功能我其实用得不多,但是编辑确实很方便。
上次您直接从函数名称修改算法的边界条件时,gdb 将调用默认编辑器。
编辑完成后,可以继续调试,所有断点信息都会被保存。
当然,这前提是你必须能够设置gdb编辑器环境变量。

最后我们来谈谈打印。
这个命令就像一把瑞士军刀。
您可以看到变量值、内存地址,甚至函数的返回类型。
我倾向于不使用印刷品来观察复杂的结构。
相反,我使用x命令,例如x/1 0gx &variable_name,内存视图一目了然。
但要注意,在调试大型数据结构时,打印速度会极其慢。
当我调试1 MB缓存时,光是打印就花了十分钟。

说实话,gdb的精髓就在于这些详细信息,例如在一步汇编中按 si(步骤),或显示自动打印变量的设置,或并排放置源代码和调试窗口的 src 布局。
如果多使用这些小技巧,调试效率可以提高不止一个档次。
不过我记得的资料是,这些功能在不同版本的gdb中可能会略有不同。
建议您在使用前先在本地测试一下。

如何在Linux中诊断网络故障 Linux ping/traceroute使用

2 02 2 年,我在某个城市遇到了网络故障。
我很困惑,不知道从哪里开始。
我按照步骤操作,首先使用 ping 来检查连接。
命令是 ping-c4 google.com。
看到“Destination Host Unreachable”,说明本地网络或路由不可达。
当时我的心就沉了下去。
然后我再次尝试ping-i0.2 google.com,发现延迟相当高,可能是由于网络拥塞。
我再次尝试 ping-s1 4 7 2 google.com 以检查 MTU 并解决碎片问题。

接下来我使用traceroute来定位故障节点。
该命令是traceroutegoogle.com。
结果是一大串数字和IP地址,并且显示了每一跳的时间。
我看了一下,前几跳正常,中间跳也正常,但最后几跳都是星号,说明问题可能出在本地运营商退出前的链路上。

然后我按照诊断流程建议,先ping本地网关1 9 2 .1 6 8 .1 .1 确认局域网正常,然后再ping外网地址8 .8 .8 .8 判断是否能出公网,结果成功。
但无法ping通域名,于是我使用nslookupgoogle.com进行验证,发现DNS配置有问题。

最后使用telnet测试服务端口,curl查看HTTP连接过程,然后使用mtr结合ping和traceroute功能实时查看链路质量。
经过一番排查,我终于找到了问题所在。
结果发现路由器被配置为不回复 ICMP。
问题解决后,网络畅通了,心情舒畅了。

Linux上FileZilla如何设置断点续传

上周我使用FileZilla在Linux上设置断点续传下载。
首先,了解重连的原理很重要,以便记录进度并找到汇合点。
然后,如果服务器支持,则连接FTP服务器并设置断点以恢复下载。
我使用的是 2 02 3 年 1 月的文件,大小为 5 GB。
休息后继续传真非常方便。
只需单击按钮即可轻松暂停和恢复传输。
但请注意,服务器必须支持此功能。
如果传输大文件,建议使用支持连续传输的协议。
如果遇到重新下载失败等问题,需要检查服务器和协议。
顺便说一句,传输过程已关闭,因此您需要确保 FileZilla 没有被强制关闭。
这样设置之后,传输效率确实提高了。
你知道,如果有必要我可以详细解释每个步骤。