Linux常见指令

目录

linux调试内存堆栈

在gdb下如何调用堆栈

查找当前目录下所有.c文件并列出来

如何看一个进程打开了哪些文件

查看本机的 CPU 使用状态

查看端口号的链接状态

监视表达式的值


linux调试内存堆栈

堆栈向量检测是一项重要的调试技术,主要是利用进程堆栈内存中的特定内容来帮助检测程序运行时可能出现的错误。堆栈向量检测方法可以帮助程序员更容易地检测出任何运行时堆栈中出现的问题,可以有效地定位潜在的非法操作和漏洞,以帮助改善程序的性能和安全性。

堆栈向量检测的相关实例如下:

  • 使用strace 命令用于进程的跟踪。程序员可以使用strace命令来跟踪程序的执行过程,便于他们发现和分析不正常的指令执行情况。如果出现了段错误,使用strace可以方便的定位到段错误的地方,从而明确错误的问题所在。
  • 使用GDB(GNU debugger) 来调试程序。这是一个强大的调试工具,可以帮助程序员快速地定位到潜在的错误所在,而且可以使用它来查看Running Programs的堆栈向量指令,以此来分析问题。

在gdb下如何调用堆栈

backtrace 命令:

要查看当前的堆栈信息,可使用 backtrace 命令 (缩写形式 bt)。堆栈中的每个函数都被分配了一个编号,最近被调用的函数在 0 号帧中 (栈顶)。

backtrace n 表示只打印栈顶上 n 层的栈信息 (n 表示一个正整数);相反地,backtrace -n 表示只打印栈底下 n 层的栈信息。

frame 命令:

如果想查看栈中某一层的信息,首先要做的是切换当前栈。这时候需用用到 frame 命令 (缩写形式为 f)。
frame n 命令表示在 GDB 下切换到编号为 n 的栈帧 (n 表示一个正整数)。例如,frame 4 将切换到栈的第 5 层。

使用 frame 命令切换栈帧时,会自动打印出切换后的栈帧信息,如果切换时不想打印出任何信息,可以使用 select-frame 命令替代 frame 命令。

up/down 命令:

除了使用 frame 命令切换栈帧外,还可以使用 up 和 down 命令。
down n 命令表示往栈顶方向下移 n 层 (n 表示一个正整数,默认值为 1)。相反地,up n 命令表示往栈底方向上移 n 层 (类似地,up 表示往栈底方向上移 1 层)。

注:在虚拟内存地址空间中,栈从高地址向低地址延伸 (即栈顶在下),故往栈顶方向移动是 down。
同样地,up 和 down 命令都会打印出移动到的栈层的信息。如果不想让 GDB 打印出信息,可以分别使用 up-silently 和 down-silently 代替之。

info 命令:

使用 info 命令可以查看各种变量的值。
如果希望看到详细的当前栈帧的信息,如函数地址、调用函数的地址、被调用函数的地址、当前函数由哪种编程语言编写、函数参数地址及形参值、局部变量的地址等,可以使用 info frame 命令(缩写形式 i f)。

info args 命令可打印出当前函数的参数名及其形参值;info locals 命令可打印出当前函数中所有局部变量及其值;info catch 命令可打印出当前函数中的异常处理信息。

关于栈和栈帧:

内存栈区 (stack) 由编译器自动分配和释放,用于存放函数的形参值、局部变量的值、函数返回地址等数据,其操作方式与数据结构中的栈一致,都是后进先出的原则。在虚拟内存地址空间中,栈从高地址向低地址延伸。

栈帧 (stack frame) 是编译器用来实现函数调用的一种数据结构,是内存栈区的基本单元。内存栈空间上保持了 N 个栈帧的实体。

所有函数调用均发生在栈上,每个函数的每次调用,都有它自己独立的一个栈帧。寄存器 ebp 指向当前栈帧的底部 (高地址),寄存器 esp 指向当前栈帧的顶部 (低地址)。

查找当前目录下所有.c文件并列出来

ls *.c

如何看一个进程打开了哪些文件

lsof -c <进程名>
lsof -p <进程号>

查看本机的 CPU 使用状态

top

查看端口号的链接状态

netstat -tlnp | grep : <端口号>

监视表达式的值

watch <表达式>

你可能感兴趣的:(linux,运维,服务器)