2017-10-10 39 views
0

我有一大块代码,其中有一些网络操作,我无法将其粘贴到此处。使用gdb启动时的进程转储Linux

我的问题是当我用gdb开始它时,它显示过程开始时seg故障。但是当我在没有gdb的情况下运行它时,它会继续运行,并且在某个随机时间它会发生故障。可能是什么原因?有没有确定的内存损坏?

+0

请将您的代码添加到帖子中。你是否试图找出错误发生在哪一点? – moooeeeep

+0

可能的原因:您正在使用多线程应用程序,并且线程之间存在不良同步,您可以通过首先使用回溯来调试您的问题,然后可能使用'睡眠'来延迟某些说明,以便您确定是谁造成了seg故障 – Mouin

+0

您是否曾尝试在'valgrind'中运行相同的代码? – dlmeetei

回答

0

该进程在GDB内部立即崩溃的一个可能原因是GDB禁用了地址空间随机化ASLR

您可以在gdb重新启用ASLR像这样:

(gdb) set disable-randomization off 
(gdb) run 

可以GDB之外禁用ASLR像这样:

setarch x86_64 -R ./a.out ... 

或者你可以在很宽禁用ASLR系统,像这样:

sudo -c "echo 0 > /proc/sys/kernel/randomize_va_space" 

是否有一些内存腐败的sur è?

确实存在某处的错误。无论是内存损坏或其他一些错误取决于如何其中该进程崩溃,并且您还没有告诉我们任何相关的细节。