相关疑难解决方法(0)

在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万
查看次数

gdb,在文件中的所有函数上设置断点

gdb中是否有一个命令可以在给定文件中的所有函数上设置断点?我知道rbreak正则表达式在匹配正则表达式函数时设置断点,但我的文件没有固定的图案化函数.

换句话说,是否有一个命令可以通过它在文件名上设置断点.这意味着,只要控制进入这个文件,它就会破坏?

我个人认为这在gdb中实现起来并不困难,但只是想知道是否有人已经这样做了.

gdb breakpoints function

42
推荐指数
2
解决办法
2万
查看次数

当命名函数/符号到达堆栈顶部时,Eclipse GDB中断

有没有办法让GDB在到达堆栈顶部时停止在命名符号处?我问,因为在下图所示的堆栈帧之后,程序似乎执行了几个函数(太多不能逐步执行)而没有符号信息,只有地址,然后崩溃可执行文件.如果有任何方法在堆栈顶部推送或弹出任何带有任何文本名称的功能时自动停止,而不仅仅是一个地址,我很感激被告知.

上下文是我正在诊断在我的信号处理程序在一个内部抛出异常时在调试测试和发布测试模式中发生的崩溃BOOST_CHECK_THROW.std::raise(SIGFPE)虽然所引发的信号类型似乎并不重要,但信号是由触发的.即使我使用一些复杂的技巧来让程序发出信号并多次抛出,在非测试模式下也不会发生崩溃.

示例堆栈跟踪

//common includes
#include <chrono> // s
#include <csetjmp> // jmp_buf, longjmp, setjmp
#include <csignal> // raise, signal
#include <cstdlib> // set_terminate
#include <iostream> // cout
#include <stdexcept> // exception, runtime_error
#include <string> // string, to_string
#include <thread> // sleep_for

namespace {

void sig_handler(int sig){
 std::signal(sig,SIG_DFL);
 std::signal(sig,sig_handler);
 throw std::runtime_error(std::string("Caught signal: ") +
  std::to_string(sig) + "\n");
}

void install_sig_handler(){std::signal(SIGFPE,sig_handler);} //add signals here

struct sig{sig(){install_sig_handler();}};

} //anonymous namespace

#ifndef TEST //non-test build functions, global setup, and main …
Run Code Online (Sandbox Code Playgroud)

c++ eclipse gdb boost-test mingw-w64

6
推荐指数
0
解决办法
127
查看次数

使用“rbreak filename.c:”在文件中放置断点。不起作用

我想在文件的所有函数上放置断点。我遇到了这个链接:http : //sourceware.org/gdb/download/onlinedocs/gdb/Set-Breaks.html#Set-Breaks

它建议为此使用 rbreak 命令。当我使用“rbreak”时。,它按预期工作正常,并在程序的所有函数中放置断点。但是什么时候用

rbreak 文件名.c:。

这根本不起作用,也没有在任何地方放置断点。我什至尝试了这种在 : 周围放置空格的变体,但即使这样也行不通。

关于如何做到这一点的任何想法?有可能吗?任何帮助将不胜感激。

谢谢,维卡斯

gdb

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

标签 统计

gdb ×3

boost-test ×1

breakpoints ×1

c++ ×1

debugging ×1

eclipse ×1

function ×1

linux ×1

mingw-w64 ×1

trace ×1