lqw198421 2020-04-28 22:02 采纳率: 0%
浏览 158

异步解析其他线程的调用栈

目的:
解析某个函数被调用时的调用栈

方式:
1.同步、同线程解析——成功解析
在目标函数内利用libunwind来实现,大概代码如下:
unw_cursor_t cursor;
unw_context_t context;
unw_getcontext(&context);
unw_init_local(&cursor, &context);
while (unw_step(&cursor) > 0)
{
unw_word_t offset, pc;
char symbols[64] = {0};

    unw_get_reg(&cursor, UNW_REG_IP, &pc);
    unw_get_proc_name(&cursor, symbols, sizeof(symbols), &offset);
            printf ("%lu : (%s+0x%lu) [%lu]\n", pc, symbols, offset, pc);

}

2.异步、异线程解析——失败
在目标进程A启动时create一个新的线程B,在A进程的目标函数Func内保存一些信息,然后A继续执行,B去解析A的调用栈;
A的代码大概如下:
int depth = 0;
while (unw_step(&cursor[depth]) > 0)
{
unw_get_reg(&cursor[depth], UNW_REG_IP, &pc[depth]);

depth++;
}
B的代码大概如下:
nt curDepth = 0;
char symbols[1024][64];
while(curDepth < depth)
{
unw_get_proc_name(&cursor[curDepth], symbols[curDepth], 64, &offset[curDepth]);
}
整体的思路大概就是通过异步、多线程的方式来减少解析调用栈的耗时。
但是libunwind的没有提供上述的实现机制,目前也没有很好的思路,不知道大家有没有什么好的建议?非常感谢!

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao
  • ¥20 Vite 打包的 Vue3 组件库,图标无法显示
  • ¥15 php 同步电商平台多个店铺增量订单和订单状态
  • ¥15 关于logstash转发日志时发生的部分内容丢失问题
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题