Linux调试方法
文章平均质量分 76
.
R-QWERT
这个作者很懒,什么都没留下…
展开
-
Linux进程僵死原因排查思路
正常情况下脚本执行时间几秒完成,如果超过很长时间执行完成,可能是进程等待某些资源引起阻塞(假死状态)。场景:xx.perl读取文件并发送邮件现象:执行脚本的进程僵死(卡住)排查:ps -ef |grep “perl xx.perl”跟踪:strace -p 16634 (跟踪进程执行时的系统调用和所接收的信号(即它跟踪到一个进程产生的系统调用,包括参数、返回值、执行消耗的时间),卡在read(3,位置查看进程文件描述符目录:查看3进行的是socket操作,也就是卡在通信。转载 2023-02-08 21:01:23 · 1114 阅读 · 0 评论 -
Linux:内存泄漏检测工具--Valgrind
在写大型C/C++工程时难免会发生内存泄漏现象,系统编程中一个重要的方面就是有效地处理与内存相关的问题。你的工作越接近系统,你就需要面对越多的内存问题。有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦。 常见的内存问题一共七种:1. 动态内存泄露;2. 资源泄露,比如文件指针不关闭;3. 动态内存越界;4.数组内存越界;5.动态内存double free;6.使用野指针,即未初始化的指针;7.释放野指针,即未初始化的指针。内存问题非常难定位,对于小工程来说,简单去检查代码中new和dele转载 2021-07-25 22:51:34 · 3566 阅读 · 0 评论 -
Linux调试:calltree安装与使用(一个用于静态分析函数调用关系的工具)
1、编译安装下载地址: https://pan.baidu.com/s/15LMzyjoEstpi4rgwTZCoxw(提取码3exq)安装步骤:# 如果系统是x86架构,则需要进行以下规则的配置cp RULES/i686-linux-cc.rul RULES/x86_64-linux-cc.rul# 由于项目中的configure已经弃用,推荐直接使用make,但是make之前先配置项目中函数名与gcc函数名冲突问题find . -name "*.[c|h]" |xargs sed -i -原创 2021-04-07 18:12:45 · 1803 阅读 · 0 评论 -
Linux调试:cflow安装与使用(一个用于静态分析函数调用关系的工具)
1、安装sudo apt-get install cflow2、使用通过cflow --help可以查看使用方法,主要有以下几个常用的选项:-A, --all:展示所有函数,不仅仅是从main函数调用的;-b, --brief:简要输出;–cpp[=COMMAND]:运行指定的预处理命令;-d, --depth=NUMBER:设置流程图被切断的深度;-D, --define=NAME[=DEFN]:预定义名字作为宏;-f, --format=NAME:使用给定输出格式名,可选的有gn原创 2021-04-07 16:03:02 · 1394 阅读 · 0 评论 -
Linux gdb调试(5):coredump调试
什么是coredump Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个文件里。 该文件也是二进制文件,可以使用gdb、elfdump、objdump或者windows下的windebug、solaris下的mdb进行打开分析里面的具体内容。 注:core是在半导体转载 2021-06-11 16:59:02 · 430 阅读 · 0 评论 -
Linux gdb调试(4):多进程与多线程调试
一,gdb的基础知识 1>介绍: gdb是Linux环境下的代码调试工具。 2>使用:需要在源代码生成的时候加上 -g 选项. 3>开始使用: gdb binFile 4>退出:ctrl + d 或 quit 5>调试过程中的常用命令: list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:运行程序。 s或step:进入函数调用 breaktrace转载 2021-06-11 16:56:51 · 282 阅读 · 0 评论 -
Linux gdb调试(3):VSCode+gdbserver实现图形化的远程调试
1、配置步骤先在VSCode上打开源码所在文件夹(或者打开workspace工作区):然后点击左侧窗口的调试选项或者按下“Ctrl+Shift+D”打开调试功能:完成后生成“launch.json”文件,初始内容如下:其中有几个比较重要的参数(默认不提供的话我们也可以手动添加上去):name:调试的项目名,无所谓啦;program:程序名称,最好是绝对路径;args:给main函数传递参数;cwd:需要调试的程序的源码路径;environment:环境变量的设置;miDebugg原创 2021-05-01 20:35:24 · 673 阅读 · 2 评论 -
Linux gdb调试(2):交叉编译gdb调试工具及gdbserver的使用方法
1、交叉编译gdb源码下载:http://ftp.gnu.org/gnu/gdb/tar xzvf gdb-8.0.1.tar.gzcd gdb-8.0.1/./configure --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gccmake # 编译生成两个比较重要的可执行文件:gdb/gdb 和 gdb/gdbserver/gdbserver2、gdb使用方法Linux调试:gdb基本使用方法3、gdbserver使用方法原创 2020-12-17 22:28:35 · 570 阅读 · 0 评论 -
Linux gdb调试(1):gdb基本使用方法
1、基本使用方法 Windows上的IDE图形化软件使得程序的调试比较方便,而Linux常用的是gdb命令,它同样可以实现打断点、查看程序运行时某个变量值等等操作,在Ubuntu上默认自带gdb,可以直接调试运行在系统上的应用程序。(注意,需要用到gdb调试的话在编译时需要加上-g选项。)常用选项如下:选项功能list / l查看源代码,可跟行号、函数名break / b设置断点,可根据行号或函数名,还可以设置条件断点,如:b 10 if i==2info / i原创 2020-12-17 19:08:46 · 458 阅读 · 0 评论 -
Linux调试:使用strace命令跟踪程序的系统调用(附交叉编译步骤)
1、使用介绍 一般来说,Ubuntu等系统里面都已经装了starce命令,可以直接加-h选项查看更多使用方法,不过一般都是strace [-o file] <被跟踪的程序>:strace作为父进程,“被跟踪的程序”作为子进程,子进程涉及的系统调用会在系统的异常处理阶段被父进程记录下来,我们可以使用它来定位一些简单的问题。以最简单的hello world程序为例:#include <stdio.h>int main(){ printf("Hello, world!原创 2020-12-16 17:29:19 · 587 阅读 · 0 评论