当前位置: 首页 > news >正文

c程序调试命令

ltrace 是 Linux 系统中一款强大的调试工具,用于跟踪程序调用的 库函数系统调用,并打印函数的参数和返回值。它类似于 strace,但更专注于用户态的库函数调用(如 C 标准库函数 printfmalloc 等)。

strace:跟踪进程的系统调用(如openread)和信号,用于调试IO问题。

基本用法

ltrace [选项] 程序名 [程序参数]

常用选项

选项功能描述
-c统计每个函数的调用次数、耗时等信息,程序结束后输出汇总报告
-f跟踪子进程(跟随 fork 创建的子进程)
-p <PID>附加到正在运行的进程(通过进程 ID 跟踪)
-s <长度>设置字符串参数的最大显示长度(默认 32 字节)
-t / -tt / -ttt在输出中添加时间戳(-t 精确到秒,-tt 毫秒,-ttt 微秒级 Unix 时间戳)
-e <表达式>过滤跟踪的函数(如只跟踪 printf 或排除 malloc
-o <文件>将输出重定向到文件(而非终端)

实际示例

1. 跟踪简单程序的库函数调用

创建测试程序 test.c

#include <stdio.h>
#include <string.h>int main() {char str[20];strcpy(str, "hello");printf("Length: %d\n", strlen(str));return 0;
}

编译并使用 ltrace 跟踪:

gcc test.c -o test
ltrace ./test

输出结果(展示库函数调用流程):

strcpy(0x7ffd9b9c3a30, "hello")          = 0x7ffd9b9c3a30
strlen("hello")                          = 5
printf("Length: %d\n", 5)                = 10
+++ exited (status 0) +++
2. 统计函数调用次数和耗时(-c
ltrace -c ./test

输出统计报告:

% time     seconds  usecs/call     calls      function
------ ----------- ----------- --------- --------------------0.00    0.000000           0         1 strcpy0.00    0.000000           0         1 strlen0.00    0.000000           0         1 printf0.00    0.000000           0         1 __libc_start_main
------ ----------- ----------- --------- --------------------
100.00    0.000000                     4 total
3. 过滤特定函数(-e
  • 只跟踪 printf 函数:
    ltrace -e printf ./test
    
  • 排除 strcpy 函数(只跟踪其他函数):
    ltrace -e '!strcpy' ./test
    
4. 跟踪正在运行的进程(-p

假设进程 test 的 PID 为 1234:

ltrace -p 1234
5. 跟踪子进程(-f

对于会创建子进程的程序(如 bash 脚本),使用 -f 跟踪所有子进程:

ltrace -f sh -c 'echo hello; ls'

strace 的区别

  • ltrace:主要跟踪 用户态库函数(如 libc 中的函数)。
  • strace:主要跟踪 内核系统调用(如 openreadwrite)。

根据调试需求选择:若需分析程序与库的交互,用 ltrace;若需分析程序与内核的交互,用 strace

通过 ltrace,可以快速定位程序在库函数调用中出现的问题(如参数错误、返回值异常等),是排查程序逻辑错误和性能问题的实用工具。

http://www.dtcms.com/a/415778.html

相关文章:

  • 锤子助手插件功能七十九:文件复读
  • 单县网站建设设计师网站源码
  • wordpress乐趣公园缩略图不显示单页面应用优化
  • 沧浪企业建设网站方法博客源码
  • Android开发-系统广播
  • 数据结构(长期更新)第1讲:算法复杂度
  • 中学网站模板网站建设的前端用什么编程
  • 做网站怎样快速收录广西省建设厅网站
  • 网站后台中文模板上海市黄页企业名录查询
  • 玩家自助充值网站建设织梦网站首页错位
  • 解读 2025《可信数据空间 数字合约技术要求》
  • __new__和__init__的区别是什么
  • 成都o2o网站建设wordpress资源采集插件
  • 中国建设网站官方网站我的世界做图片的网站
  • 张店网站建设定制中山网站建设最好的公司
  • 【开题答辩全过程】以 Springboot恒星科技学院学科竞赛管理系统的设计与实现为例,包含答辩的问题和答案
  • Kafka 安全性认证、加密、授权与落地最佳实践
  • 学校网站定位群晖nas wordpress
  • MySQL索引基础详细介绍
  • IDEA配置tomcat运行JavaWeb工程(附Tomcat8下载地址)
  • 强化学习(4)策略梯度与TD Learning
  • 多语言建设外贸网站中怎么做网站上下载图片的功能
  • 北京的网站建设公司有哪些怎么制作html文档
  • 资源网站平台建设方案帝国cms入门到精通企业门户网站制作建站视频教程
  • C++20中线程类std::jthread的使用
  • 拍卖行 网站建设爱奇艺的网站是用什么做的
  • 智能问答场景下的AI算力平台建设指南——从硬件选型到弹性扩展的全流程实践
  • 绍兴网站建设优化网页设计制作
  • 网站降权了怎么办天元建设集团有限公司2008年招聘
  • (二)routeros命令笔记:无线篇