2016-04-04 18 views
1

kırılma noktasının ben hata ayıklamak için gereken bir ağ yazılımı var. Birden yerlerde çatallar ve ben belirli bir isteği işleyen belirli bir işlevi hata ayıklamak gerekir.GDB: alt süreçte

Düşük bir süreçte olduğunda bile yakalanabilecek küresel bir kırılma noktası oluşturmanın bir yolu var mı? bu ilk isteği, ben değil ayıklama gereken birinin takip çünkü

Ben follow-fork-mode child kullanamazsınız. Bunu yapmak için

+0

ardından programın kendisinde kesme noktası yerleştirin. On the WIndows'da DebugBreak() işlevini kullanın. Linux'ta, yükseltmek (SIGTRAP); çalışabilir. Bu, sisteminizde etkinleştirilen tam zamanında hata ayıklamaya bağlıdır. Aksi halde, hata ayıklanmıyorsa işlem çökecektir. – joeking

cevap

2

bir yolu gdb tüm işlemlere bağlı kalır sahip olmaktır. O zaman kırılma noktanızı belirleyip programı her zamanki gibi çalıştırırsınız; Bu nokta, o yere vuran herhangi bir alt süreçte patlayacaktır. İsabet sayısını azaltmak için kesme noktası koşullarını kullanabilirsiniz.

çoklu alt moduna gdb koymak için, bunu kullanmaktan:

set detach-on-fork off 
set non-stop on 
set pagination off 

gdb sürümüne bağlı olarak, aynı zamanda set target-async on gerekebilir.

Bu mod tuhaf biraz çalışmak olabilir. Parçacıklarından biri durduğunda Örneğin, diğer devam et. Ayrıca, kesme noktaları rapor edilir, ancak her zaman açık değildir; ve bence gdb hemen durdurma ipliğine geçmiyor (gdb gitmiş gibi değişmiş olabilir, unutuyorum). Programı yeniden Eğer

+0

im söylediklerinizi tam olarak yapıyorum, ancak im alma imi 1. kesme noktası eklenemiyor. '' 0x6ede adresindeki belleğe erişilemiyor. Wat hakkında herhangi bir fikir olabilir mi? – rogi