2017-10-10 42 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 è?

確實存在某處的錯誤。無論是內存損壞或其他一些錯誤取決於如何其中該進程崩潰,並且您還沒有告訴我們任何相關的細節。