首页
学习
活动
专区
圈层
工具
发布

linux后台开发常用调试工具

ldd(显示程序需要使用的动态库和实际使用的动态库) # ldd /bin/ls linux-gate.so.1 => (0xbfffe000) librt.so.1...libc.so.6 (0xb7dc3000) libpthread.so.0 => /lib/libpthread.so.0 (0xb7dab000) /lib/ld-linux.so...opannotate -s test : 以代码的角度,针对test进程显示检测结果 opannotate -s /lib64/libc-2.4.so : 以代码的角度,针对libc-2.4.so库显示检测结果 linux...valgrind会影响进程性能,据说可能慢20倍,所以在性能要求高的情况下,只能使用mtrace这种轻量级的工具了(但是mtrace只能识别简单的内存错误)。...mtrace(检查内存错误) mtrace是glibc內提供的工具,原理很简单,就是把你程序中malloc()和free()的位置全部下來,最后两辆配对,沒有配对到的就是memory leak。

4.4K151

从源头解决内存泄漏问题:全面解析内存泄漏检测与修复技术

注意:addr2line是将地址转换为文件号,而文件是保存在磁盘中的,程序运行的地址是在虚拟内存里面的(代码段),在高版本Linux 中可能无法解析出地址在文件哪个位置。...muntrace()函数禁用mtrace()安装的hook函数,这样就不再为内存分配函数记录跟踪信息。如果mtrace()没有成功安装任何钩子函数,则muntrace()不执行任何操作。...例如:$ cc -g t_mtrace.c -o t_mtrace$ export MALLOC_TRACE=/tmp/t$ ./t_mtrace$ mtrace ....0x18865a0= End定位内存泄漏位置:$ addr2line -f -e memleak -a 0x4006b80x00000000004006b8mainmemleak.c:133.2、方式二:采用宏定义Linux...= malloc(20);void *p3 = malloc(30);free(p3);free(p2);return 0;}3.5、方式五:__malloc_hook(不推荐)这种方式适用于比较老的Linux

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我们是怎么让 Android 流畅的?流畅性优化三阶段实施方案

    backtrace 以蓝屏形式打印;Trace Analyzer 能自动分析 trace 文件,过滤无效 trace 和未抓到时间点的问题,对有效 trace 直接定位根因,减少手动分析成本、提升效率;MTrace...之所以需要 MTrace,是因为现有工具存在局限:perfetto 功能全面但需预先埋点,cpu profiling 能满足大部分需求但要求 app 有 debug 或 profile 权限,且会强制转换为解释执行导致性能下降...MTrace 与 perfetto 结合后,能补充更详细的调用链信息,比如明确 doFrame 大于 200ms 时的具体运行内容、定位大量布局 layout 导致的耗时,或是像三方输入法周期性卡顿这样的问题...—— 此前仅通过 trace 无法定位根因,结合 MTrace 后发现,每一帧的字符串操作导致内存持续增长,进而触发 GC 造成卡顿,最终锁定系统层 bug。

    22300

    Linux调试工具

    mtrace 在linux下开发应用程序,用C/C++语言的居多。内存泄露和内存越界等内存错误,无疑是其中最头疼的问题之一。glibc为解决内存错误提供了两种方案: 一种是hook内存管理函数。...另外一种方法更简单,glibc已经为第一种方案提供了默认的实现,你要做的只是在特定的位置调用mtrace/muntrace两个函数,它们的函数原型如下: #include void mtrace(void); void muntrace(void); 你可能会问,在哪里调这两种函数最好?...对于小程序来说,在进入main时调用mtrace,在退出main函数时调用muntrace。对于大型软件,这样做可能会记录过多的信息,分析这些记录会比较慢,这时可以在你所怀疑代码的两端调用。...程序运行完毕后,使用mtrace工具分析这些内存分配历史信息,可以查出内存错误的位置(mtrace在glibc-utils软件包里)。 2.

    11.3K43

    JVM堆引发swap的情况分析

    linux中物理内存是linux的主要内存区域,当物理内存不够时,linux会把一部分暂时不使用的内存数据放到磁盘swap区去,以便腾出更多可用内存空间。...对于linux系统而言,其只可以运行可执行的二进制代码,jvm进程本身是一个C语言开发的进程,因此其在使用虚拟内存时和其他普通的linux进程一样。...虚拟内存用户内存部分分成以下几部分: 代码区,linux进程的代码 数据区,linux进程的全局或者静态数据等 堆区,运行时数据动态申请的空间,程序运行时直接申请/释放的内存资源 栈区,存放函数的入参,...1 nioEventLoopGroup 1 New I/O server boss 1 New I/O boss 1 mtthrift 1 mtrace...pollingConfigurationSource 1 org.eclipse.jetty.util.RolloverFileOutputStream 1 mtthrift 1 mtrace

    4.4K60

    Node.js内存泄漏分析

    Inspector的debug界面,大家可以看下这篇博文,其中就是介绍如何应用该工具来检测内存泄漏 http://www.cnblogs.com/ldlchina/p/4762036.html node-mtrace...,它使用了GCC的mtrace工具来分析堆的使用。...https://github.com/Jimbly/node-mtrace 但是该工具提供的是点对点的,如果存在异步函数的话,会比较麻烦,这种可以结合其他工具一起使用会比较方便,大家可以看下github...如果你是在Linux的话,可以首先通过命令查看该进程ID,然后再使用top -p 进程ID ps -ef | grep node top -p 12202 随时的查看进程所占用的内存,通过访问你会看到其内存的变化情况...127.0.0.1:1337进行压测,当压测到一定的情况后,在运行窗口你可以看的其内存泄漏的提醒,并在这时候会在file这个目录文件中(如果在windows中最好就修改下file这个文件路径,这里的示例代码是相对Linux

    2.8K40

    Linux - Linux内存管理

    为了解决内存紧缺的问题,Linux引入了虚拟内存的概念。为了解决快速存取,引入了缓存机制、交换机制等。...要深入了解Linux内存运行机制,需要知道下面提到的几个方面。 首先,Linux系统会不时地进行页面交换操作,以保持尽可能多的空闲物理内存。...其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存中,Linux内核根据“最近最经常使用”算法,仅仅将一些不经常使用的页面文件交换到虚拟内存中。...Linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。...Linux下可以使用文件系统中的一个常规文件或者一个独立分区作为交换空间。同时Linux允许使用多个交换分区或者交换文件。

    60.4K42
    领券