2013-03-04 12 views
8

Tôi đã cố tìm kiếm câu hỏi này trực tuyến, nhưng có vẻ như tôi không thể tìm được giải pháp tốt cho vấn đề của mình. Vâng, tôi đang cố gắng sử dụng gdb để gỡ lỗi chương trình C++ của tôi. Và chương trình được tạo thành từ một main.cpp đơn giản và một mô hình.h. Và lệnh biên dịch làLàm thế nào để sử dụng gdb trên c + + tiêu đề tập tin?

g++ -Wall -g -c main.cpp 
g++ -Wall -g main.o -o OUTPUT 

Vì hầu như tất cả thuật toán được lưu trữ trong mô hình.h, tôi cần gỡ lỗi tệp tiêu đề đó chứ không phải tệp cpp. Tuy nhiên, bất cứ khi nào tôi cố gắng đặt một điểm break vào tiêu đề như

tbreak model.h:163 

gdb luôn cho tôi một thông điệp rằng "Không có tập tin nguồn được đặt tên TNFmodel.h".

Trong câu hỏi khác breakpoints in GDB, tôi thấy giải pháp bằng cách thêm thư mục chứa tiêu đề vào thư viện bằng "dir". Nhưng tệp tiêu đề của tôi đã có trong thư mục nguồn và sau khi thử

dir ./ 

Sự cố vẫn tồn tại.

Vì vậy, bất kỳ ai biết điều gì là sai? Làm thế nào để sử dụng gdb để gỡ lỗi một tập tin tiêu đề?

+2

là tiêu đề cũng được bao gồm từ vị trí đó khi biên dịch? Có lẽ bạn có thể đăng gdb đầu ra cho khi nhập 'nguồn thông tin'. – Nobody

+0

Ouch ... Tôi đã kiểm tra các nguồn, và thấy vấn đề bây giờ ... Trường hợp của một lá thư không phù hợp. Vâng, tôi không biết làm thế nào tôi thông qua biên dịch ... Nhưng có lẽ đó là bởi vì tôi đang sử dụng mac, và đôi khi trường hợp không nhạy cảm khi biên dịch. Sau khi sửa trường hợp, gdb hoạt động tốt cho tiêu đề. Cảm ơn. – Chong

Trả lời

3

Theo đề nghị của https://stackoverflow.com/users/760746/nobody, một cách để đảm bảo rằng các tiêu đề để có trong nguồn là veryfy nó bằng cách kiểm tra

info sources 

Sau khi đảm bảo tiêu đề nằm trong nguồn (trong trường hợp của tôi, vấn đề là trường hợp của một chữ cái trong tên tiêu đề được trộn lẫn, và bằng cách nào đó nó đi qua biên dịch trên sổ mac của tôi), chèn điểm ngắt trong dòng của một tập tin tiêu đề hoạt động tốt.

+0

Lý do nó hoạt động trên sổ mac là đĩa được định dạng thành phân biệt chữ hoa chữ thường, do đó trường hợp tên tệp không tạo ra bất kỳ sự khác biệt nào. – Chong

1

Cố gắng sử dụng break với lớp tên/phương pháp như thế này:

break class::method 
+0

Vì vậy, tôi không thể đi trực tiếp bên trong một dòng của phương pháp đó, nhưng phải đi đến phương pháp đầu tiên và sau đó theo dõi đến dòng tôi muốn nó phá vỡ? Điều đó nghe ... không thuận tiện ... – Chong

+0

Tôi không biết bất kỳ khả năng nào khác, sry dude – duDE

+1

Tôi không, đó là lý do tại sao tôi hỏi ... Đôi khi thiếu chức năng này thực sự là bất tiện ... – Chong