2012-03-04 32 views
6

Tôi có một ứng dụng cung cấp cho một tiến trình con.GDB backtrace về quá trình con

Quy trình con thực hiện một số công việc và một nơi nào đó ở giữa nó cho lỗi Phân đoạn. Tôi đã sử dụng GDB để gỡ lỗi này, tôi đã sử dụng:

set follow-fork-mode child 

Tôi cũng đã đặt điểm ngắt cho một chức năng trong trẻ. Nhưng GDB không dừng lại ở điểm dừng của tôi.

Ngoài ra quy trình cha mẹ xử lý lỗi seg vì vậy tôi đã phải ctrl-c để thoát. Sau đó, khi tôi sử dụng backtrace để in các ngăn xếp tất cả tôi nhận là

Không chồng

Tại sao breakpoint không được thiết lập và tại sao tôi không nhận được chồng?

+0

là chương trình con được viết bởi bạn? – sirgeorge

+0

không, nhưng tôi có nguồn với tôi. – broun

+0

Bạn có thể xây dựng nó (con) từ nguồn trong chế độ gỡ lỗi không? – sirgeorge

Trả lời

7

Tại sao breakpoint không được thiết lập

Các breakpoint được thiết lập, nhưng nó không phải là bị trúng bởi vì ...

và lý do tại sao tôi không nhận được ngăn xếp?

... bạn rõ ràng đang gỡ rối quy trình sai.

Với set follow-fork-mode child, GDB sẽ theo dõi lần đầu tiên con bạn tạo. Có lẽ bạn tạo nhiều hơn một?

Một cách để gỡ lỗi này là thiết lập trình xử lý SIGSEGV sử dụng signal hoặc sigaction.

Trong xử lý, thực hiện điều này:

void handler(int signo) 
{ 
    int i = 1; 
    fprintf(stderr, "pid=%d, got signal=%d\n", getpid(), signo); 
    while (i) { } 
} 

Khi bạn thấy thông báo in, trong cửa sổ khác:

gdb /proc/<pid>/exe <pid> 
(gdb) where 
+0

cảm ơn Sir. –

Các vấn đề liên quan