gpt4 book ai didi

linux - 在没有 liblttng-ust-cyg-profile 的情况下获取 lttng 回溯

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:40 28 4
gpt4 key购买 nike

是否可以在不使用 LD_PRELOADing liblttng-ust-cyg-profile 并使用 -finstrument-functions 进行编译的情况下从 lttng 获取回溯?

我无法从 lttng 代码中看出它在预加载该库以允许跟踪查看器 (tracecompass) 显示回溯时有何不同!?

这是我的测试应用:

test_tracepoints.h:

#undef TRACEPOINT_PROVIDER
#define TRACEPOINT_PROVIDER test

#undef TRACEPOINT_INCLUDE
#define TRACEPOINT_INCLUDE "test_tracepoints.h"

#if !defined(TEST_TRACEPOINTS_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
#define TEST_TRACEPOINTS_H

#include <lttng/tracepoint.h>

TRACEPOINT_EVENT_CLASS(
test,
test_tc,
TP_ARGS(const char *, str_arg, void *, func_addr),
TP_FIELDS(ctf_integer_hex(unsigned long, addr, (unsigned long) func_addr)
ctf_integer_hex(unsigned long, call_site, __builtin_return_address(0))
ctf_string(str, str_arg)))

TRACEPOINT_EVENT_INSTANCE(
test,
test_tc,
test_tp_start,
TP_ARGS(const char *, str_arg, void *, func_addr))

TRACEPOINT_EVENT_INSTANCE(
test,
test_tc,
test_tp_end,
TP_ARGS(const char *, str_arg, void *, func_addr))

#endif

#include <lttng/tracepoint-event.h>

test_tracepoints.c:

#define TRACEPOINT_DEFINE
#define TRACEPOINT_CREATE_PROBES

#define TP_IP_PARAM func_addr

#include "test_tracepoints.h"

测试.lttng.c:

#include "test_tracepoints.h"

#include <unistd.h>

void f(useconds_t usec)
{
const char * str = "f";
tracepoint(test, test_tp_start, str, f);
usleep(usec);
tracepoint(test, test_tp_end, str, f);
}

int main()
{
for (unsigned n = 0; n != 10000; ++n)
{
f(100);
f(200);
}

return 0;
}

我正在测试这个:

gcc -O0 -g -fno-omit-frame-pointer -I . test_tracepoints.c test.lttng.c -o test.lttng -llttng-ust -ldl
lttng-sessiond --daemonize
lttng create -o lttng.session.test test
lttng enable-event -u -a
lttng add-context -s test -u -t procname -t vtid
lttng list test
lttng start test
./test.lttng
lttng destroy test
pkill lttng-sessiond

最佳答案

不,目前不直接支持它。但它肯定在愿望 list 上。

当您预加载 function tracing helper (liblttng-ust-cyg-profile.so,或其 -fast 版本),LTTng 事件在每个时间点发出(以 lttng_ust_cyg_profile 为前缀)功能入口/导出。您需要创建一个事件规则来显式启用它们:

lttng enable-event --userspace lttng_ust_cyg_profile'*'

我不确定 Trace Compass不过,在其分析中完全使用这些事件记录。

关于linux - 在没有 liblttng-ust-cyg-profile 的情况下获取 lttng 回溯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40887396/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com