小编cro*_*oss的帖子

使用etrace在C++中按时间顺序跟踪函数调用

背景:

我有一个很大的模拟工具,我需要了解它的逻辑行为.为了做到这一点,如果我有函数调用的时间顺序,我将得到的大部分帮助,用于最小的工作示例.

我在网上找到了很多工具,比如CygProfileretrace.我找到了一个解决方案,我开始遵循使用调试器"步入"的最疯狂的解决方案,我变得非常痛苦.如果您有一个小程序但不是一个完整的模拟工具,这是一个很好的选择.


问题:

我面临的一个问题是上面提到的解决方案最初是用于编译时C生成静态文件(*.o).另一方面,模拟工具生成共享库(.so).我对较低级别的东西知之甚少,所以当我尝试链接它们时,我似乎失败了.

我特意看了一下etrace 文档,它说:

要了解如何修改ptrace.c以使用动态库,请查看example2目录.这里的源代码也创建了一个独立的可执行文件,但PTRACE_REFERENCE_FUNCTION宏的定义与动态库一样.

如果你看看repo,文件exampleexample2文件夹之间没有区别.只有一个额外的.h文件example2.

另一方面,如果你看src/ptrace.c那里它说:

在动态库上使用ptrace时,必须将PTRACE_REFERENCE_FUNCTION宏设置为库中函数的名称.此功能的加载时,地址将线路输出第一跟踪文件,并且允许其他出入境指针的翻译符号名.您可以将宏PTRACE_INCLUDE设置为该函数可访问此源文件所需的任何#include指令.

稍微低于评论代码:

/* When using ptrace on a dynamic library, the following must be defined:
#include "any files needed for PTRACE_REFERENCE_FUNCTION"
#define PTRACE_REFERENCE_FUNCTION functionName
`*/
Run Code Online (Sandbox Code Playgroud)

题:

本质上问题如下:如何使用etrace动态库?

我需要#include任何文件吗?

要跟踪独立程序,不需要#include任何其他文件.只需将代码链接到ptrace.c,并使用-finstrument-functions选项作为gcc的编译选项.这应该做到这一点.

如何链接通过makefile构建的C++代码 ptrace.c

最后的注意事项:如果有人承担我的无知并为我的问题提供逐步解决方案,我将不胜感激.


更新1:

我设法将与etrace相关的库添加到模拟工具中,并且执行正常.

但是,(可能是因为脚本太旧,或者不适合与C++一起使用)在使用默认情况下提供的perl脚本时出现以下错误:etrace

Hexadecimal number > 0xffffffff non-portable"
Run Code Online (Sandbox Code Playgroud)

可能这会改变这个问题的性质,在这一点上更多地转向与perl相关的问题.

如果这个问题得到解决,我希望 …

c c++ macros perl profiling

15
推荐指数
1
解决办法
982
查看次数

是否可以使用n个键初始化std :: map,其中n是预定义的?

我想知道是否可以初始化一个std::mapn键:value元素,其中n是预定义的(类似于数组初始化:) array[n].

我不知道这样的构造函数存在,std::map但我想我可以问以防万一.

或者可以做的是:

#include <iostream>
#include <map>

int main()
{
   int n = 5;
   std::map<int,double> randomMap;

   for(int i = 0; i < n; ++i)
   {
       randomMap.insert({i,0.9});
   }

   for(auto j: randomMap)
   {
       std::cout<<"key: " << j.first <<"\tvalue: " << j.second << std::endl;
   }

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stdmap

6
推荐指数
1
解决办法
2859
查看次数

将一系列值映射到单个值

我需要映射值之间的范围lowerBound,并upperBound以一定的价值.

说明性示例:

例如,假设我有GPS系统,用户订阅了它.该系统能够为我提供用户与某一点的距离.根据用户的距离,我想为他们分配一个ID.

从而远离用户

  • 1100获得ID: 8.4
  • 101200获得ID: 7.2
  • 201300获得ID: 3.6
  • 401600获得ID: 4.1

等等...

我的方法:

所以我做了什么,我创建了一个std::map初始化如下:

   std::map<int, double> distanceToIdMap; 

   distanceToIdMap =
    {
            {100, 8.4},
            {200, 7.2},
            {300, 3.6},
    };
Run Code Online (Sandbox Code Playgroud)

然后我使用此代码获取给定距离的ID:

double roundUpToHundred = std::ceil(realDistance / 100.0) * 100;
double powerForDistance = distanceToIdMap.at(roundUpToHundred);
Run Code Online (Sandbox Code Playgroud)

然而,我的方法401对于600距离来说是分解的,因为天花板到距离的最接近的百度400+我得到的值500我在地图中没有条目.当然,平凡的解决办法是添加一个条目500distanceToIdMap,但是这是我不希望如何处理这个问题.

我想有一个{(lowerbound, upperbound) , …

c++ c++11

5
推荐指数
1
解决办法
1642
查看次数

如何在 ggplot2 中重命名(组合)图例?

是否有可能重新命名一个融合了不同美学的传奇?ggplot2

例如:

  1. 将颜色与线型结合起来:控制 ggplot 图例中的线条颜色和线型
  2. 将颜色与形状结合起来:如何使用线条符号在 colorbrewer 调色板中回收颜色

怎样才能重新命名这样一个组合的传奇呢?当我尝试使用nameforscale_shape_manualscale_color_manual组合图例时,它会分成两个不同的图例。那不是我想要的。


可能的解决方案:我在这里找到的解决方案: https: //stackoverflow.com/a/14622513/4317408对我有用......

基本上有两种可能的方法,在这两种方法中,为了使组合图例获得新名称,name组合的两个不同图例的必须修改为相同的:

  scale_color_manual(values = c(brewer.pal(5, "Set1") ) , name = "Combined Legend Title") +
  scale_shape_manual(values = c(1,2,3,4,5) , name = "Combined Legend Title")
Run Code Online (Sandbox Code Playgroud)

或者

  guides(shape=guide_legend(title="Combined Legend Title"), color=guide_legend(title="Combined Legend Title"))
Run Code Online (Sandbox Code Playgroud)

我仍然想知道是否有更简单的方法可以做到这一点?

r ggplot2

5
推荐指数
0
解决办法
1204
查看次数

从图例中删除错误栏(ggplot2)

我用以下命令绘制了一个图:

ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) +
  #stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank()) 
Run Code Online (Sandbox Code Playgroud)

我得到了这个传说:

在此处输入图片说明

但是,当我取消注释命令的第3行时:

ggplot(data=test_mod, aes(x=realDist , y=1-value, color=as.factor(foo) , size=as.factor(foo) )) +
  stat_summary(fun.y=mean, geom="line", alpha=0.85 ) + 
  stat_summary(fun.y=mean, geom="point", pch=21, fill="white", size=2 ) +
  stat_summary(fun.data=mean_cl_normal, geom="errorbar", width=8, size = 0.5) + 
  theme_bw(base_size = 15, base_family = "Palatino") + 
  theme(legend.key = element_blank()) 
Run Code Online (Sandbox Code Playgroud)

我得到一个略有不同的传说: …

plot r legend ggplot2

3
推荐指数
1
解决办法
1492
查看次数

什么是聚合sqldf查询的普通R等价物?

R以下sqldf查询的简单等效命令是什么"

test <- sqldf("SELECT *, SUM(value) FROM dataFrame GROUP BY run")
Run Code Online (Sandbox Code Playgroud)

我试着像:

test <-aggregate(dataFrame$value, by=list(dataFrame$run), FUN=sum, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)

但不知何故,这SUM发生在每一列dataFrame

r

2
推荐指数
1
解决办法
147
查看次数

如何从facet_grid()中删除灰色背景(ggplot2)

我有以下情节:

在此输入图像描述

通过执行获得:

ggplot() + 
  stat_summary( data = test_data1, aes(x=x, y=(1-value) , colour = as.factor(1) , lty = as.factor(1) ) , fun.y=mean, geom="line" ,  size=1 ) +
  stat_summary( data = test_data1, aes(x=x, y=(1-value) , colour = as.factor(1), shape=as.factor(1) ) , fun.y=mean, geom="point" ,  size=3, pch=21, fill="white" ) +
  stat_summary( data = test_data2, aes(x=x, y=(1-value) , colour = as.factor(2), lty = as.factor(2) ) , fun.y=mean, geom="line", size=1 ) +
  stat_summary( data = test_data2, aes(x=x, y=(1-value) , colour = as.factor(2), shape=as.factor(2)) , fun.y=mean, …
Run Code Online (Sandbox Code Playgroud)

r facet ggplot2

2
推荐指数
1
解决办法
4026
查看次数

绘制 R 中同一个表中两列的并排箱线图

我有以下数据:

structure(list(osc = c(14944966.1544549, 21761557.221199, 22468349.3727696, 
25347942.08608, 23753968.4211987, 21988336.4211988, 24782010.0211988, 
23466022.821199, 24862768.4211988, 24753030.8211989, 6290574.27199998, 
6347336.50713587, 6133022.93504007, 6096474.45708794, 6310948.70553584, 
6730668.06553585, 7041845.44716779, 6834310.72460792, 7099525.34016, 
7427605.81836809, 6489665.40799994, 3923620.15923189, 5597911.8079998, 
5246583.80800014, 5770297.40799987, 5486879.80800004, 6084583.80800003, 
6719183.80800007, 6575468.60799991, 10992555.0079998), phone = c(14012229.0213694, 
21428112.3570197, 21387319.7062893, 23452910.4634375, 23561326.6405997, 
21295405.7333708, 24791075.2993385, 23077156.3984319, 24595401.2681341, 
24576961.6364291, 6436497.31657422, 6273285.60788477, 5998908.36035547, 
5837113.11736719, 6138679.45996679, 6229959.76306446, 6790623.7462578, 
6752280.48147853, 6625959.55551369, 6979249.86094727, 6642155.1844375, 
3965572.43175781, 5462667.62250977, 5232575.67903125, 5466322.91543554, 
5380533.88633204, 5814654.14943164, 6482157.46073438, 6269535.74795312, 
10938578.8058379), type = c("local", "local", "local", "local", 
"local", "local", "local", "local", "local", "local", "up", "up", 
"up", …
Run Code Online (Sandbox Code Playgroud)

r boxplot

2
推荐指数
1
解决办法
2268
查看次数

Hmisc的'mean_cl_normal函数'是如何工作的?

什么是内部结构mean_cl_normal function并且可以安全地用于置信区间计算?它是如何工作的?

r

0
推荐指数
1
解决办法
1722
查看次数

标签 统计

r ×6

c++ ×3

ggplot2 ×3

boxplot ×1

c ×1

c++11 ×1

facet ×1

legend ×1

macros ×1

perl ×1

plot ×1

profiling ×1

stdmap ×1