linux线上程序问题调试命令

linux线上程序问题调试命令,第1张

根据这些可以查看系统调用的完整性,比如说服务器连接数一直涨,说明fd没有close,close调用在上边有缺失

strace -t -T -v -f -p 16705 -Te write 只看write系统调用

sudo gcore xxpid 生成dump文件

sudo dlv core binfile core.xxxx 调试coredump文件,查看调用栈、goroutines

查看系统级别日志 /var/log/messages

messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。

tcpdump -i lo -nnA 'port 7076' and 'tcp[13] &4 != 0 ' 抓rst包,发送给7076端口或者是7076端口发出去的

mac osx系统:sudo tcpdump -i lo0 -nnA 'port 3000'

环境:

创建时间:2022-02-24

修改时间:2022-02-24

linux下使用gdb调试程序是一个基本 *** 作。

本文介绍使用code-server + gdb离线远程调试C++的cmake工程。

最终效果:可以在没有GUI界面的centos上,在windows上以浏览器的方式调试centos上的C++程序。

镜像加速

安装

目录结构:

test.cpp

myprint.h

myprint.cpp

CMakeLists.txt

注意:必须生成Debug模式,否则无法调试

建议使用CMake Tools进行编译。

注意:离线下需要同时下载CMake和CMake Tools

linux下验证应用程序是否为debug版本:

默认使用配置文件:~/.config/code-server/config.yaml

设置密码

不设置密码

浏览器中输入http://IP:8080即可访问

安装C++调试插件 C/C++ extension for VS Code

安装cmake插件 CMake Tools

注意:离线下需要同时下载CMake和CMake Tools

launch.json

设置断点,在code-server中按F5进行调试。

code-server左侧有变量、监视、调用堆栈、断点和Modules信息。

一、GDB 概述

GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。

一般来说, GDB 主要帮忙你完成下面四个方面的功能:

1 、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2 、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3 、当程序被停住时,可以检查此时你的程序中所发生的事。

4 、动态的改变你程序的执行环境。

从上面看来, GDB 和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现 GDB 这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。

二、一个调试示例

源程序: tst.c

[cpp] view plain copy

#include <stdio.h>

int func(int n)

{

int sum=0,i

for(i=0i<ni++)

{

sum+=i

}

return sum

}

int main()

{

int i

long result = 0

for(i=1i<=100i++)

{

result += i

}

printf("result[1-100] = %d /n", result )

printf("result[1-250] = %d /n", func(250) )

}

编译生成执行文件:( Linux 下)

hchen/test>cc -g tst.c -o tst

启动Gdb:

以上是对于gdb的感性认识,接下来系统地认识一下 gdb 吧。

三、使用 GDB

1.基础

一般来说 GDB 主要调试的是 C/C++ 的程序。要调试 C/C++ 的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器( cc/gcc/g++ )的 -g 参数可以做到这一点。如:

>cc -g hello.c -o hello

>g++ -g hello.cpp -o hello

如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用 -g 把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用 gdb 来调试他。

启动 gdb 后,就你被带入 gdb 的调试环境中,就可以使用 gdb 的命令开始调试程序了, gdb 的命令可以使用 help 命令来查看,

gdb 的命令很多, gdb 把之分成许多个种类。 help 命令只是例出 gdb 的命令种类,如果要看种类中的命令,可以使用 help <class>命令,如: help breakpoints ,查看设置断点的所有命令。也可以直接 help <command>来查看命令的帮助。如下图所示:

要退出 gdb 时,只用发 quit 或命令简称 q 就行了。

2 GDB 中运行 UNIX 的 shell 程序

在 gdb 环境中,你可以执行 UNIX 的 shell 的命令,使用 gdb 的 shell 命令来完成:

shell <command string>

调用 UNIX 的 shell 来执行 <command string>,环境变量 SHELL 中定义的 UNIX 的 shell 将会被用来执行 <command string>,如果 SHELL 没有定义,那就使用 UNIX 的标准 shell : /bin/sh 。(在 Windows 中使用 Command.com 或 cmd.exe )

还有一个 gdb 命令是 make :

make <make-args>

可以在 gdb 中执行 make 命令来重新 build 自己的程序。这个命令等价于 “ shell make <make-args>”

3 在 GDB 中运行程序

在 gdb 中,运行程序使用 r 或是 run 命令。程序的运行,你有可能需要设置下面四方面的事。

1 、程序运行参数。

set args 可指定运行时参数。(如: set args 10 20 30 40 50 )

show args 命令可以查看设置好的运行参数。

2 、运行环境。

path <dir>可设定程序的运行路径。

show paths 查看程序的运行路径。

set environment varname [=value] 设置环境变量。如: set env USER=hchen

show environment [varname] 查看环境变量。

3 、工作目录。

cd <dir>相当于 shell 的 cd 命令。

pwd 显示当前的所在目录。

4 、程序的输入输出。

info terminal 显示你程序用到的终端的模式。

使用重定向控制程序输出。如: run >outfile

tty 命令可以指写输入输出的终端设备。如: tty /dev/ttyb


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11144431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存