嵌入式linux使用trace调试步骤记录

0.内核配置:
CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER

一、 function graph tracer的使用

1.1 步骤

1.挂载debugfs文件系统
mount -t debugfs none /sys/kernel/debug

2.进入tracing调试目录
cd /sys/kernel/debug/tracing

3.设置为function_graph功能
echo function_graph > ./current_tracer

4.添加需要跟踪的函数blk_update_request
echo ‘phytium_lpc_probe’ > ./set_graph_function

5.开启跟踪
echo 1 > ./tracing_on

6.执行自己的操作或者脚本,等待函数运行或者bug出现

7.关闭跟踪
echo 0 > ./tracing_on

8.取出log
cp ./trace ~/log.txt

优化:
1.设置函数过滤
echo vfs_open > ./set_ftrace_filter

2.设置当前进程pid过滤
echo $$ > /sys/kernel/debug/tracing/set_ftrace_pid

3.函数结束的反括号后带函数入口的注释
echo 1 > ./options/funcgraph-proc
echo 1 > ./options/funcgraph-tail

4.使能trace子进程
echo 1 > /sys/kernel/debug/tracing/options/function-fork

1.2 例子

function.sh脚本:

rm ~/0.log
#cd /sys/kernel/debug/tracing/
echo 0 > /sys/kernel/debug/tracing/tracing_on
#echo 1 > /sys/kernel/debug/tracing/options/func_stack_trace
echo 1 > /sys/kernel/debug/tracing/options/function-fork
#echo 1 > /sys/kernel/debug/tracing/options/sym-offset
echo $1 > /sys/kernel/debug/tracing/set_ftrace_pid
echo > /sys/kernel/debug/tracing/trace
echo function > /sys/kernel/debug/tracing/current_tracer

#echo load_balance > /sys/kernel/debug/tracing/set_ftrace_filter
echo try_to_wake_up > /sys/kernel/debug/tracing/set_ftrace_filter
echo select_task_rq_fair >> /sys/kernel/debug/tracing/set_ftrace_filter
echo wake_up_q >> /sys/kernel/debug/tracing/set_ftrace_filter

echo 1 > /sys/kernel/debug/tracing/tracing_on

cat /sys/kernel/debug/tracing/trace_pipe  |tee -a ~/0.log

可以使用命令 ./function.sh 8888运行,其中8888为bash控制台的pid。

cd /sys/kernel/debug/tracing/
echo 0 > tracing_on
echo > trace
echo $1 > /sys/kernel/debug/tracing/set_ftrace_pid
echo function_graph > /sys/kernel/tracing/current_tracer
echo do_interrupt_handler > set_graph_notrace
echo __delay >> set_graph_notrace
echo _printk >> set_graph_notrace
echo stack_trace_save >> set_graph_notrace
echo ww_mutex_unlock >> set_graph_notrace
echo ww_mutex_lock >> set_graph_notrace
echo 1 > ./options/funcgraph-proc
echo 1 > ./options/funcgraph-tail
echo ‘__filemap_fdatawrite_range’ > ./set_graph_function
#echo ‘do_writepages’ > ./set_graph_function
echo 1 > /sys/kernel/debug/tracing/tracing_on

cat /sys/kernel/debug/tracing/trace_pipe  |tee -a ~/0.log

二、kprobe的使用

1.挂载debugfs文件系统
mount -t debugfs none /sys/kernel/debug

2.进入tracing调试目录
cd /sys/kernel/debug/tracing

3.设置配置属性获取函数传入参数和返回值

echo 'p:myprobe do_fork clone_flags=%r0 stack_start=%r1 stack_size=%r2 parent_tidptr=%r3 child_tidptr=+0($stack)' > /sys/kernel/debug/tracing/kprobe_events
echo 'r:myretprobe do_fork $retval' >> /sys/kernel/debug/tracing/kprobe_events

上面是arm的用法,下面是X86的:

echo 'p bio_add_page arg1=$arg1 arg2=$arg2' > /sys/kernel/tracing/kprobe_events

4.开启探测并触发函数调用
echo 1 > events/kprobes/myprobe/enable
echo 1 > events/kprobes/myretprobe/enable

5.执行自己的操作或者脚本,等待函数运行或者bug出现

6.取出log
cp ./trace ~/log.txt

优化:
1.激活堆栈查看函数调用关系
echo stacktrace > trace_options

2.设置过滤PID信息
echo common_pid!=512 > events/kprobes/myprobe/filter

三、 trace event的使用

3.1 步骤

1.挂载debugfs文件系统
mount -t debugfs none /sys/kernel/debug

2.进入tracing调试目录
cd /sys/kernel/debug/tracing

3.设置events跟踪开关
ehco 1 > ./events/kmem/kmalloc/enable
ehco 1 > ./events/kmem/kfree/enable

4.开启跟踪
echo 1 > ./tracing_on

5.执行自己的操作或者脚本,等待函数运行或者bug出现

6.关闭跟踪
echo 0 > ./tracing_on

7.取出log
cp ./trace ~/log.txt

优化:
1.设置内存内存过滤信息
echo bytes_alloc==4096 > ./events/kmem/kmalloc/filter

3.2 例子

events.sh文件


echo > trace
echo $1 > set_event_pid
echo 1 > options/event-fork
#echo 0 > /sys/kernel/debug/tracing/events/sched/sched_switch/filter
echo 'prev_comm == "sysbench" || next_comm == "sysbench" ' > /sys/kernel/debug/tracing/events/sched/sched_switch/filter

echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
cat /sys/kernel/debug/tracing/trace_pipe |tee -a a

这个例子是查看sysbench进程的调度出去和调度进来的例子。

### 高斯点绘技术概述 高斯点绘(Gaussian Splatting)是一种用于计算机图形学和可视化中的高效渲染方法,通过将几何体表示为一组加权高斯分布来增强效率、交互性和真实感[^1]。 #### 技术原理 在具体实施过程中,在给定的场景数据上,系统会预测对应于该输入的一系列高斯点。这些高斯点不仅包含了位置信息还携带了颜色和其他属性参数。此过程通常基于特定算法框架完成,比如pixelSplat实现方案中提到的方法[^2]。 对于大规模场景的应用而言,所采用的训练策略允许将由不同视角下的图像对所产生的全部高斯点串联起来形成完整的表达形式,从而支持更广泛的环境建模需求。 ```python import numpy as np def generate_gaussian_points(image_pairs): gaussian_points = [] for pair in image_pairs: # 基于pair生成单个高斯点 point = compute_gaussian_point(pair) # 添加到总集合中 gaussian_points.append(point) return gaussian_points def compute_gaussian_point(pair): mean_position = calculate_mean_from_pair(pair) # 计算均值向量 covariance_matrix = estimate_covariance(mean_position, pair) # 估计协方差矩阵 return {'mean': mean_position, 'covariance': covariance_matrix} ``` #### 应用实例 为了更好地捕捉物体表面附近的细节特征以及体积效果(如毛发或草),一种改进方式是从初始优化阶段提取基础网格结构并在此基础上构建具有可变厚度适应层的高斯分布模型[^5]。这种方法可以显著提高复杂纹理的表现力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小坚学Linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值