我正在使用GCC编译器在Linux上工作.当我的C++程序崩溃时,我希望它能自动生成一个堆栈跟踪.
我的程序由许多不同的用户运行,它也可以在Linux,Windows和Macintosh上运行(所有版本都使用编译gcc
).
我希望我的程序能够在崩溃时生成堆栈跟踪,并且在用户下次运行它时,它会询问他们是否可以将堆栈跟踪发送给我,以便我可以追踪问题.我可以处理向我发送信息,但我不知道如何生成跟踪字符串.有任何想法吗?
我在Linux中有一个进程出现分段错误的进程.如何在失败时告诉它生成核心转储?
我有一个程序在某处抛出未捕获的异常.我得到的只是一个抛出异常的报告,并没有关于它被抛出的信息.编译为包含调试符号的程序似乎不合逻辑,不通知我在代码中生成异常的位置.
有没有办法告诉我的地方是例外,从短期在gdb设置"抓扔",并呼吁每一个抛出的异常回溯的到来?
我有一个应用程序,我用它来捕获任何分段错误或ctrl-c.使用下面的代码,我能够捕获分段错误,但是一次又一次地调用处理程序.我怎么能阻止他们.为了您的信息,我不想退出我的申请.我只需要注意释放所有损坏的缓冲区.
可能吗?
void SignalInit(void )
{
struct sigaction sigIntHandler;
sigIntHandler.sa_handler = mysighandler;
sigemptyset(&sigIntHandler.sa_mask);
sigIntHandler.sa_flags = 0;
sigaction(SIGINT, &sigIntHandler, NULL);
sigaction(SIGSEGV, &sigIntHandler, NULL);
}
Run Code Online (Sandbox Code Playgroud)
和处理程序是这样的.
void mysighandler()
{
MyfreeBuffers(); /*related to my applciation*/
}
Run Code Online (Sandbox Code Playgroud)
这里对于Segmentation故障信号,处理程序被多次调用,很明显,MyfreeBuffers()给了我释放已经释放的内存的错误.我只想释放一次,但仍然不想退出应用程序.
请帮忙.
我有linux c ++多线程应用程序.现在它已在生产服务器上进行测试并具有段错误.问题是我无法在任何测试服务器上重现该错误,也无法访问生产服务器.我没有转储或任何其他有用的信息.只有行:segfault at 0000000046bf0fb8 rip 000000000048ac6b rsp 0000000046bf0fa0 error 6
我想问社区我可以从这样的线路获得一些信息,这些信息将有助于减少我应该搜索的地方的区域.由于速度慢,我无法在生产上运行调试版本.我可以添加哪些内容来帮助我调试?这个bug看起来像多线程的bug,很难重现.但我不确定,因为应用程序可以处理来自MTA的许多不同的电子邮件.
平台:Linux
编译器行:g ++ -O3 -D_REENTRANT
谢谢.
upd.:谢谢你的回答.我可以包含调试信息.我想知道调试发布版本的基本方法.例如,我有转储和发布版本.我该怎么办?我该怎么读?您能用几句话解释如何调试应用程序吗?谢谢.