linux程序调试与调优专题
文章平均质量分 66
老司机介绍linux程序调试与调优技术
奇妙之二进制
csdn博客专家,C/C++领域优质创作者,专注于Linux C/C++、嵌入式Linux开发,偶尔谈谈人生,目前致力于完成大约500篇的linux C/C++开发知识体系库,所有的文章都会一直保持更新(优化内容、排版),想学习的可以订阅我的专栏。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何配置core dump生成
在Linux系统中配置core dump生成主要涉及调整系统限制和设置文件路径。原创 2025-07-03 21:39:32 · 1239 阅读 · 0 评论 -
coredump文件的原理是啥
Core Dump(核心转储)是操作系统在程序崩溃(如段错误、非法指令等)时自动生成的一个文件,它包含了程序崩溃瞬间的。通过 core dump,开发者可以像“时间回溯”一样检查程序崩溃瞬间的状态,是调试复杂问题的利器!终止时,Linux 内核会生成 core 文件。不会生成 core dump,因为它们是“优雅终止”信号。这样 core 文件会直接压缩存储,节省磁盘空间。的文件(类似可执行文件),可以用。Core 文件本质上是一个。原创 2025-06-08 09:55:49 · 310 阅读 · 0 评论 -
Linux平台排查CPU占用高的进程和线程指南
定位高CPU进程:使用top/htop/ps找出问题进程分析进程线程:top -H/ps -T查看线程情况检查调用栈:使用gdb/perf分析执行路径监控系统调用:strace跟踪具体行为检查依赖资源:查看是否因等待IO/锁等导致分析日志:检查系统日志和应用日志。原创 2025-06-03 21:32:54 · 1298 阅读 · 0 评论 -
udev开启日志调试
开启udev日志udev_log:syslog记录日志的级别,默认值是 err。如果改为 info 或者 debug 的话,会有冗长的 udev 日志被记录下来。重启udevdsudo systemctl restart systemd-udevd原创 2022-12-06 18:01:04 · 1937 阅读 · 0 评论 -
高级嵌入式软件工程师必备技能---Linux下core文件调试方法
在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。2) 使用ulimit -c filesize命令,可以限制core文......转载 2018-07-04 19:43:31 · 2020 阅读 · 0 评论 -
程序退出前的遗言----linux下利用backtrace追踪函数调用堆栈以及定位段错误
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。intbacktrace(void**buffer,intsize)该函数用于获取当前线程的调用堆栈,获取的信息将......转载 2018-07-05 09:28:51 · 2188 阅读 · 0 评论 -
gdb调试技巧(6)关于源文件路径问题
在gdb里面查看源码,list 一下提醒找不到相关文件,列出来的是绝对路径的完整文件名。help files 看一下帮助,可以加载符号,源文件等,自己看一下。dir 设置源码路径无效,show directories 看到设置成功,但是还是找不到文件。应该是绝对路径的问题。因为gcc 根据你编译的时候指定的是绝对路径还是 …/…/XXX.cpp之类的相对路径,在生成debug_info的时候,也把这个路径保存为debug_info 里面的文件名字,就是最后 gdb list 里面找到的文件名字。转载 2022-06-20 01:27:34 · 4412 阅读 · 1 评论 -
gdb调试技巧(0)gdb入门
转自网友,我就不重复造轮子了,高阶部分我来补。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。对于一名Linux下工作的c/c++程序转载 2022-06-20 01:04:23 · 828 阅读 · 0 评论 -
GDB调试实战(9)多线程调试
使用gdb调试多线程时,和调试单线程时类似,但是需要附加使用几个命令来协助进行线程切换。a-首先是使用info threads查看当前有哪些线程,当前所在线程。b-然后使用threads id切换到其它线程。c-最后用thread apply id|all command 来把命令在某线程或所有线程下执行,这里的command就是你平常敲的gdb命令。例如,你是否遇到过在线程里设置断点,程序停住之后,你试图按下n单步运行,你会发现运行的下一步并非是本线程断点的下一条语句,有点找不到北。其实应该执行, id替原创 2022-06-20 00:35:58 · 3508 阅读 · 0 评论 -
GDB调试实战(7)信号处理
在GDB调试状态中,可以在命令号输入来向程序发送信号。输入signal按下tab会显示信号名:GDB处理信号背景:gdb的默认行为是将信号捕获,而不是传递给调试程序,我们可以通过命令配置改变这一行为在GDB中handle指令用于设置GDB对于信号的处理,可以输入help handle来查看。总结大体意思:上面的6项配置,其实应该划分成3组可以相互叠加的状态。即:stop/nostopprint/noprintpass/nopass在GDB中可以使用info signals和info handle来查转载 2022-06-19 23:06:47 · 2186 阅读 · 0 评论 -
GDB调试实战(8)给程序传递启动参数
有时候,我们的调试程序需要从命令行接受输入参数,我们来看下gdb如何给调试程序传递启动参数。可以在gdb启动时,通过选项指定被调试程序的参数,例如:也可以在gdb中,通过命令来设置,例如:也可以在运行程序时,直接指定:可以看出,参数已经被保存了,下次运行时直接运行run命令,即可。有意的是,如果我接下来,想让参数为空,该怎么办?是的,直接:......转载 2022-06-19 22:21:14 · 2688 阅读 · 0 评论 -
cpu指令重排导致错误的一个例子
cpu指令重排原创 2022-06-19 19:34:51 · 635 阅读 · 0 评论 -
什么是内存屏障
内存屏障,也称内存栅栏,内存栅障,屏障指令等, 是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作。大多数现代计算机为了提高性能而采取乱序执行,这使得内存屏障成为必须。语义上,内存屏障之前的所有写操作都要写入内存;内存屏障之后的读操作都可以获得同步屏障之前的写操作的结果。因此,对于敏感的程序块,写操作之后、读操作之前可以插入内存屏障。大多数处理器提供了内存屏障指令:内核代码里定义了这三种内存屏障,如x86平台:arch/原创 2022-06-14 00:36:40 · 650 阅读 · 0 评论 -
Linux性能分析专题(1)perf牛刀小试------从一个简单的程序谈起
首先完成perf共计的安装。很简单,在终端输入perf,会提示找不到该命令,根据命令提示安装即可。perf命令perf命令支持很多子命令:性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足够高,采样时间足够长,原创 2022-06-05 14:00:42 · 785 阅读 · 0 评论 -
Linux性能分析专题(0)性能分析倚天剑perf横空出世
perf 是用来进行软件性能分析的工具,它是由内核原生支持的,随内核源码发布。通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。最初的时候,它叫做 Performance counter,在 2.6.31 中第一次亮相。此后他成为内核开发最为活跃的一个领域。在 2.6.32 中它正式改名为 Performa转载 2022-06-04 21:04:59 · 722 阅读 · 0 评论 -
Linux下进程信息/proc/pid/status文件深入分析
信号位图和信号值对应关系:位图bit=信号值-1。进程切换次数也可以判定进程是否死锁。主动切换表示主动放弃cpu。被动切换表示被动放弃CPU,被高优先级任务或本身时间片耗完而被动放弃CPU。......原创 2021-10-24 22:37:26 · 4953 阅读 · 0 评论
分享