我想知道在使用某个文件中的函数时是否有任何方法可以停止程序.理想情况下,我正在寻找的是:
GDB Stop when use a function from file foo.cpp
Run Code Online (Sandbox Code Playgroud)
这样做的原因是因为我正在调试一个不是我的代码而且我不确切地知道调用了哪些函数以及哪些函数不是.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) 我想在文件的所有函数上放置断点。我遇到了这个链接:http : //sourceware.org/gdb/download/onlinedocs/gdb/Set-Breaks.html#Set-Breaks
它建议为此使用 rbreak 命令。当我使用“rbreak”时。,它按预期工作正常,并在程序的所有函数中放置断点。但是什么时候用
rbreak 文件名.c:。
这根本不起作用,也没有在任何地方放置断点。我什至尝试了这种在 : 周围放置空格的变体,但即使这样也行不通。
关于如何做到这一点的任何想法?有可能吗?任何帮助将不胜感激。
谢谢,维卡斯
我做了一个应用程序,其中有一个文件main.c使用文件中的函数master.c.我想master.c通过使用调试我的文件中定义的所有函数的应用程序gdb tool.这有可能吗?如果可以的话怎么样?