2013-03-24 27 views
6

Câu hỏi của tôi có vẻ cụ thể, nhưng tôi nghi ngờ nó vẫn có thể là một vấn đề gỡ lỗi C++.Số lượt truy cập mã thoát 139 khi chạy, nhưng gdb thực hiện qua

Tôi đang sử dụng omnet ++ để mô phỏng mạng không dây. bản thân omnet ++ là một chương trình C++.

Tôi gặp phải hiện tượng lạ khi tôi chạy chương trình của mình (khuôn khổ inet được sửa đổi với omnet ++ 4.2.2 trong Ubuntu 12.04): chương trình thoát với mã thoát 139 (mọi người nói điều này có nghĩa là phân mảnh bộ nhớ) khi chạm vào một phần nhất định của mã, khi tôi cố gắng để gỡ lỗi, gdb không báo cáo bất cứ điều gì sai với mã 'có vấn đề', nơi mô phỏng thoát trước đó, thực sự, gỡ lỗi đi qua phần này của mã và kết quả đầu ra dự kiến.

gdb thông tin phiên bản: GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04

thể ai cho tôi biết tại sao thời gian thất bại nhưng debug không?

Rất cám ơn!

+2

Âm thanh như hành vi không xác định. Chúng tôi không thể không nhìn thấy mã có vấn đề. –

Trả lời

17

thoát đang 139 (người nói điều này có nghĩa là sự phân mảnh bộ nhớ)

Không, nó có nghĩa là chương trình của bạn chết với tín hiệu 11 (SIGSEGV trên Linux và hầu hết UNIXes khác), còn được gọi là segmentation fault.

Ai đó có thể cho tôi biết tại sao chạy không thành công nhưng gỡ lỗi thì không?

Chương trình của bạn thể hiện hành vi không xác định và có thể làm bất cứ điều gì (bao gồm thỉnh thoảng xuất hiện hoạt động chính xác).

Đầu tiên bước của bạn sẽ chạy chương trình này trong Valgrind và sửa tất cả lỗi mà báo cáo.

Nếu sau khi thực hiện ở trên, chương trình vẫn bị treo, sau đó bạn nên để nó đổ lõi (ulimit -c unlimited; ./a.out) và sau đó phân tích kết xuất lõi đó với GDB: gdb ./a.out core; sau đó sử dụng lệnh where.

+0

cảm ơn bạn đã trả lời nhanh chóng, tôi đang tìm cách chạy chương trình trong dấu nhắc lệnh, bây giờ tôi bị mắc kẹt bởi trình mô phỏng. Tôi sẽ báo cáo lại sau khi phân tích với valgrind. – ulyssis2

+0

Bây giờ tôi có thể chạy và gỡ lỗi chương trình thông qua dấu nhắc lệnh, cả chạy và gỡ rối trên "mã có vấn đề", sau đó tôi sử dụng Eclipse eclipse một lần nữa, tôi thấy rằng trong chế độ gỡ lỗi, nó dừng lại ở cùng một nơi bằng cách sử dụng dấu nhắc lệnh, khi tôi chạy chương trình từng bước, nó cũng thực hiện thông qua "mã có vấn đề", nhưng khi tôi chạy nó, chương trình sụp đổ ở đâu đó xung quanh "mã có vấn đề". Tôi đoán đây là do IDE, vì bản thân GUI cũng là một chương trình, và không thể hoạt động tốt dưới chế độ chạy bình thường. Tôi không biết tại sao. – ulyssis2

+0

@ ulyssis2 Valgrind nói gì? Chương trình có thể hoạt động bên ngoài IDE, nhưng Valgrind vẫn nên nói cho bạn biết về lỗi của bạn. –

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