相关疑难解决方法(0)

我的程序崩溃时如何自动生成堆栈跟踪

我正在使用GCC编译器在Linux上工作.当我的C++程序崩溃时,我希望它能自动生成一个堆栈跟踪.

我的程序由许多不同的用户运行,它也可以在Linux,Windows和Macintosh上运行(所有版本都使用编译gcc).

我希望我的程序能够在崩溃时生成堆栈跟踪,并且在用户下次运行它时,它会询问他们是否可以将堆栈跟踪发送给我,以便我可以追踪问题.我可以处理向我发送信息,但我不知道如何生成跟踪字符串.有任何想法吗?

c++ crash gcc assert stack-trace

561
推荐指数
20
解决办法
33万
查看次数

如何在Linux上生成分段错误的核心转储?

我在Linux中有一个进程出现分段错误的进程.如何在失败时告诉它生成核心转储?

unix linux bash coredump tcsh

208
推荐指数
12
解决办法
34万
查看次数

如何找到C++中抛出异常的位置?

我有一个程序在某处抛出未捕获的异常.我得到的只是一个抛出异常的报告,并没有关于它被抛出的信息.编译为包含调试符号的程序似乎不合逻辑,不通知我在代码中生成异常的位置.

有没有办法告诉我的地方是例外,从短期在gdb设置"抓扔",并呼吁每一个抛出的异常回溯的到来?

c++ debugging exception-handling

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

分段故障处理

我有一个应用程序,我用它来捕获任何分段错误或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()给了我释放已经释放的内存的错误.我只想释放一次,但仍然不想退出应用程序.

请帮忙.

c linux signals signal-handling

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

Linux/C++如何调试发布应用程序

我有linux c ++多线程应用程序.现在它已在生产服务器上进行测试并具有段错误.问题是我无法在任何测试服务器上重现该错误,也无法访问生产服务器.我没有转储或任何其他有用的信息.只有行:segfault at 0000000046bf0fb8 rip 000000000048ac6b rsp 0000000046bf0fa0 error 6

我想问社区我可以从这样的线路获得一些信息,这些信息将有助于减少我应该搜索的地方的区域.由于速度慢,我无法在生产上运行调试版本.我可以添加哪些内容来帮助我调试?这个bug看起来像多线程的bug,很难重现.但我不确定,因为应用程序可以处理来自MTA的许多不同的电子邮件.

平台:Linux

编译器行:g ++ -O3 -D_REENTRANT

谢谢.

upd.:谢谢你的回答.我可以包含调试信息.我想知道调试发布版本的基本方法.例如,我有转储和发布版本.我该怎么办?我该怎么读?您能用几句话解释如何调试应用程序吗?谢谢.

c++ linux multithreading

9
推荐指数
3
解决办法
6826
查看次数