有没有办法让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)