当程序转储核心时,我们已设置kernel.core_pattern
将核心文件放在具有特定文件名等的特定位置。
kernel.core_pattern = | /var/core_file_handler.py %e %s %p %lu %g %t
Run Code Online (Sandbox Code Playgroud)
这是目标目录和示例核心文件:
$ ls -l /var/cores
drwxr-xr-x 2 root root 4.0K Mar 23 09:42 app
$ ls -l /var/cores/app/
-rw-r--r-- 1 root root 60510208 Mar 23 09:42 2016.03.23_09.42.14.867727_11_SIGSEGV_u
Run Code Online (Sandbox Code Playgroud)
CentOS 6.7
在 CentOS 6.7 上,我有 bash 4.1.2 和 gdb 7.5
$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
$ gdb --version
GNU gdb (GDB) Red Hat Enterprise Linux (7.5.0.20120926-26.el6)
Run Code Online (Sandbox Code Playgroud)
当我想打开一个核心文件时,我可以输入 gdb 然后用tab 完成路径和核心文件
gdb ./app /var/cores/app/201.... <tab>
Run Code Online (Sandbox Code Playgroud)
这将成功完成核心文件名的制表符。
Ubuntu 14.04
在 Ubuntu 14.04 上,我有 bash 4.3.11 和 gdb 7.7.1
$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
$ gdb --version
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Run Code Online (Sandbox Code Playgroud)
当我想打开一个核心文件时,我可以输入 gdb 然后tab 完成路径,但不是核心文件
gdb ./app /var/cores/app/ <tab> <tab> <tab>....
Run Code Online (Sandbox Code Playgroud)
这不会制表符完成核心文件名。它只是被卡住了/var/cores/app/
,不会再进一步了
/var/cores/app
两台机器上的访问权限相同/var/cores/app/core_file
两台机器上的访问权限相同题:
为什么我可以在 CentOS 上用制表符完成核心文件名,而在 Ubuntu 上不能?
这与可编程完成有关。这个想法是,通过排除程序无法处理的事情,可以让用户的生活变得更轻松。
然而,在实践中,我经常发现,通过从完成中排除一些东西,你将不可避免地得到一些虽然完成排除但你确实想要使用的东西。到那时,可编程完成就成为负担而不是帮助。
您可以通过三种方法解决此问题:
apt-get remove bash-completion
complete -r
,这会再次删除所有完成规则。如果您从类似的方式执行此操作.bashrc
,效果将与第一个选项相同,只是在 bash 启动时会出现一些性能损失,因为规则会被处理然后再次删除。alt
+/
而不是tab
强制 bash 执行文件名完成。 归档时间: |
|
查看次数: |
482 次 |
最近记录: |