相关疑难解决方法(0)

如何分析在Linux上运行的C++代码?

我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?

c++ unix profiling

1732
推荐指数
12
解决办法
49万
查看次数

如何为C++代码生成调用图

我正在尝试生成调用图,用它来找出所有可能执行特定函数的执行路径(这样我就不必手动计算出所有路径,因为有很多路径可以导致这个功能).例如:

path 1: A -> B -> C -> D  
path 2: A -> B -> X -> Y -> D  
path 3: A -> G -> M -> N -> O -> P -> S -> D  
...  
path n: ...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过Codeviz和Doxygen,不知怎的,两个结果只显示目标函数的被调用者D.在我的例子中,D是一个类的成员函数,其对象将被包装在智能指针中.客户端将始终通过工厂获取智能指针对象以调用D.

有谁知道如何实现这一目标?

c++ static-analysis call-graph

79
推荐指数
4
解决办法
5万
查看次数

在Linux中跟踪本地函数调用的工具

我正在寻找像ltracestrace这样的工具,它可以跟踪可执行文件中的本地定义函数.ltrace仅跟踪动态库调用,而strace仅跟踪系统调用.例如,给定以下C程序:

#include <stdio.h>

int triple ( int x )
{
  return 3 * x;
}

int main (void)
{
  printf("%d\n", triple(10));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行程序ltrace将显示调用,printf因为这是一个标准库函数(我的系统上是一个动态库),strace并将显示启动代码,用于实现printf的系统调用和关闭代码的所有系统调用,但我想要一些能告诉我函数triple被调用的东西.假设优化编译器没有内联本地函数,并且二进制文件没有被剥离(符号被删除),是否有工具可以做到这一点?

编辑

几点澄清:

  • 如果该工具还提供非本地功能的跟踪信息,那也没关系.
  • 我不想重新编译支持特定工具的程序,可执行文件中的符号信息应该足够了.
  • 如果我可以使用该工具附加到现有的进程,就像我可以使用ltrace/strace一样,我会非常高兴.

linux debugging trace

58
推荐指数
5
解决办法
6万
查看次数

如何获得使用递归的警告?

嵌入式软件开发的一些规则集和指南完全禁止递归。我使用arm-none-eabi-gcc基于 ARM Cortex-M4 的微控制器。

我正在寻找一个静态分析工具,它会警告我在代码中使用递归。我对此类工具的经验很少。是否可以为此使用 clang-tidy 或 clang 静态分析器?如果是,我如何配置它们以警告递归?

(快速查看gcc 选项摘要告诉我,仅 gcc 无法做到这一点。)

笔记:

  • 请不要告诉我“只是不要递归”。代码库很大,而不是我一个人。我希望能够证明其中没有递归。
    (这就像说“只是不要取消引用空指针”。虽然没有人故意这样做,但存在工具是为了验证它不会发生。)

c recursion gcc clang

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

为什么`-finstrument-functions`对我不起作用?

根据这个答案,它应该打印所有函数名称:

[root@ test]# cat hw.c
#include <stdio.h>

int func(void)
{  
  return 1;
}
int main(void)
{
  func();
  printf("%d",6);
  return 6;
}
[root@ test]# gcc -Wall hw.c -o hw -finstrument-functions
[root@ test]# ./hw 
6
[root@ test]# gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
Copyright (C) 2006 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

但为什么它不适合我呢?

gcc

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

标签 统计

c++ ×2

gcc ×2

c ×1

call-graph ×1

clang ×1

debugging ×1

linux ×1

profiling ×1

recursion ×1

static-analysis ×1

trace ×1

unix ×1