首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不加油污就能得到回溯的痕迹

不加油污就能得到回溯的痕迹
EN

Stack Overflow用户
提问于 2016-11-30 11:38:02
回答 1查看 329关注 0票数 0

有没有可能在不使用LD_PRELOADing liblttng-ust-cyg-配置文件和使用-finstrument-函数进行编译的情况下从lttng中得到回溯?

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

这是我的测试应用程序:

test_tracepoints.h:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#define TRACEPOINT_DEFINE
#define TRACEPOINT_CREATE_PROBES

#define TP_IP_PARAM func_addr

#include "test_tracepoints.h"

test.lttng.c:

代码语言:javascript
复制
#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;
}

我正在用以下方法测试这个:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-30 14:14:54

不,目前还没有直接支持。但这绝对在愿望清单上。

在预加载功能跟踪助手 (liblttng-ust-cyg-profile.so或其-fast版本)时,在每个函数输入/退出处都会发出LTTng事件(以lttng_ust_cyg_profile为前缀)。您需要创建一个事件规则来显式地启用它们:

代码语言:javascript
复制
lttng enable-event --userspace lttng_ust_cyg_profile'*'

不过,我不确定微量罗盘在其分析中是否使用了这些事件记录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40887396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档