gdb调试

在这里插入图片描述

1、生成core文件,然后用gdb调试

core文件大小默认设置为0,不会生成
需要生成时手动设置大小:
# ulimit -c unlimited
查看core文件大小:
# ulimit -c
发现大小为无限:unlimited

# 一般修改/etc/security/limit.conf文件中的soft 为unlimited

在生成的core文件(一般core后带进程号)中用gdb执行调试:

gdb convert core.1934    

用bt命令后得到具体的函数调用关系和具体的行号:

(gdb) bt
#0  CHello::func (this=0x7fff3f930fdf) at hello.cpp:13
#1  0x0000000000400944 in func () at main.cpp:11
#2  0x000000000040094f in main () at main.cpp:21

2、使用gdb调试可执行文件

注:在GDB命令提示符后,直接按回车键为重复上一次的命令。

  1. 编译源码生成可执行文件gdb_test,运行该文件
#ls -lrt /tmp
#ls -lrt /var/lib/systemd/coredump
#gdb ows core-12345//(ows和core文件在同一个目录下)


#crash代码运行肯定会出现错误
./gdb_test
  1. 启动gdb装载gdb_test文件
gdb gdb_test
  1. 输入run命令,执行装载的文件,可看到崩溃的提示信息。这个程序比较简单,崩溃的信息中已经直接说明在哪个文件的哪一行。如果还是无法定位,接着往下看:

在这里插入图片描述

  1. 输入where 命令,查看程序可能出错的地方。

在这里插入图片描述

  1. 输入list命令,查看第7行附近的代码

在这里插入图片描述

  1. 用break命令,在第7行处设置断点.

在这里插入图片描述

  1. 输入run命令,重新运行程序,程序运行到第7行处停止运行

在这里插入图片描述

  1. 在这里只有一个变量赋值,唯一可能导致出错的就是这个变量b,输入print命令查看b的值

在这里插入图片描述

1> etc目录下存放系统管理和配置文件 (系统配置)

etc/profile: profile为所有的用户设置系统范围的环境变量和启动顺序,当用户登录时读取该文件,这个文件对每个shell都有效。

/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。也就是说,当用户shell执行了bash时,运行这个文件。

总结如下:

/etc/profile 作用域大于/etc/bashrc。
/etc/profile 是所有用户登录时加载配置环境,/etc/bashrc 是所有用户在执行bash shell 时,加载配置环境。

2> ~/.bashrc(用户配置)

该文件存储的是专属于个人bash shell的信息,当登录时以及每次打开一个新的shell时,执行这个文件,在这个文件里可以自定义用户专属的个人信息。

修改/etc路径下的配置文件将会应用到整个系统,属于系统级的配置,而修改用户目录下的.bashrc则只是限制在用户应用上,属于用户级设置。两者在应用范围上有所区别,建议如需修改的话,修改用户目录下的.bashrc,即无需root权限,也不会影响其他用户。

PATH环境变量

PATH变量决定了shell 将到哪些目录中寻找命令或程序。如果要执行的命令的目录在 $PATH 中,您就不必输入这个命令的完整路径,直接输入命令就可以了。一些第三方软件没有将可执行文件放到 Linux 的标准目录中。因此,将这些非标准的安装目录添加到 $PATH 是一种解决的办法。此外,您也将看到如何处理一般的环境变量。

首先,作为惯例,所有环境变量名都是大写。由于 Linux 区分大小写,这点您要留意。当然,您可以自己定义一些变量,如’ p a t h ′ 、 ′ path'、' pathpAtH’,但 shell 不会理睬这些变量。

第二点是变量名有时候以’ ′ 开 头 , 但 有 时 又 不 是 。 当 设 置 一 个 变 量 时 , 直 接 用 名 称 , 而 不 需 要 加 “ '开头,但有时又不是。当设置一个变量时,直接用名称,而不需要加“ ”,如

“PATH=/usr/bin:/usr/local/bin:/bin”

假如要获取变量值的话,就要在变量名前加’$’:
“echo $PATH”
则会显示当前设置的PATH变量“/usr/bin:/usr/local/bin:/bin”

否则的话,变量名就会被当作普通文本了:
“echo PATH”
显示“PATH”
处理 $PATH 变量要注意的第三点是:您不能只替换变量,而是要将新的字符串添加到原来的值中。在大多数情况下,您不能用“PATH=/some /directory”,因为这将删除 P A T H 中 其 他 的 所 有 目 录 , 这 样 您 在 该 终 端 运 行 程 序 时 , 就 不 得 不 给 出 完 整 路 径 。 所 以 , 只 能 作 添 加 : “ P A T H = PATH 中其他的所有目录,这样您在该终端运行程序时,就不得不给出完整路径。所以,只能作添加:“PATH= PATHPATH=PATH:/some/directory”,假如你要添加/usr/local/arm/3.4.1/bin交叉编译命令,则操作为“PATH=$PATH:/usr/local/arm/3.4.1/bin”
这样,PATH 被设成当前的值(以 $PATH 来表示)+新添的目录。

到目前为止,你只为当前终端设置了新的 $PATH 变量。如果您打开一个新的终端,运行 echo $PATH ,将显示旧的 $PATH 值,而看不到你刚才添加的新目录。因为你先前定义的是一个局部环境变量(仅限于当前的终端)。

要定义一个全局变量,使在以后打开的终端中生效,您需要将局部变量输出(export),可以用"export"命令:

   export PATH=$PATH:/some/directory

现在如果打开一个新的终端,输入 echo P A T H , 也 能 看 到 新 设 置 的 PATH ,也能看到新设置的 PATHPATH 了。请注意,命令’export’只能改变当前终端及以后运行的终端里的变量。对于已经运行的终端没有作用。

   为了将目录永久添加到 $PATH ,只要将"export"的那行添加到.bashrc或/etc/bashrc文件中。

使用命令:

sudo gedit ~/.bashrc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HSMgogogo!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值