2009-10-30 33 views
7

Tôi đang cố gắng sử dụng check khung kiểm tra đơn vị cho ứng dụng C của tôi. Nhưng tôi không thể sử dụng chương trình gỡ rối (gdb) với nó vì hai điểm:Kiểm tra đơn vị gỡ lỗi trong C bằng cách sử dụng séc

  • đầu tiên, kiểm tra sử dụng một số macro phức tạp (START_TESTEND_TEST) và trình gỡ lỗi có khó khăn để đặt một breakpoint trong mã của tôi giữa hai macro này (trên thực tế, tôi có thể đặt điểm ngắt phần mềm nhưng không bao giờ được thấy bởi gdb)

  • giây, kiểm tra xác định một số loại ngoại lệ bằng cách xác định lại hành vi gián đoạn. Do đó, khi tôi cố gắng đặt điểm ngắt phần cứng, kiểm tra không thành công và thoát vì kiểm tra xem điểm ngắt phần cứng là một sự thất bại trong thử nghiệm của tôi.

Có ai đã gặp sự cố này và có giải pháp không?

Trả lời

11

Nhìn vào no-fork mode:

Kiểm tra thường dĩa để tạo ra một không gian địa chỉ riêng biệt. Điều này cho phép một tín hiệu hoặc lối ra sớm bị bắt và báo cáo, thay vì lấy toàn bộ chương trình thử nghiệm, và thường rất hữu ích. Tuy nhiên, khi bạn đang cố gắng gỡ lỗi tại sao lỗi phân đoạn hoặc lỗi chương trình khác xảy ra, việc sử dụng lệnh làm cho việc sử dụng các công cụ gỡ lỗi trở nên khó khăn.

0

Hãy thử TAP (Kiểm tra giao thức bất kỳ) ... việc triển khai, xử lý và gỡ lỗi dễ dàng hơn rất nhiều. Nó cũng rất dễ dàng để làm cho nó valgrind -aware và có xu hướng chơi đẹp hơn với gdb.

+0

Kể từ 2016-09-23, liên kết TAP tới [http://ccan.ozlabs.org/info/tap.html](http://ccan.ozlabs.org/info/tap.html) là 404. Trang web chính, ozlabs.org, vẫn đang chạy, nhưng tôi không thể định vị thông tin TAP. Wikipedia có mục nhập cho [Test Anything Protocol] (https://en.wikipedia.org/wiki/Test_Anything_Protocol); có một trang web cho [Test Anything Protocol] (https://testanything.org/) với các triển khai trong C, C++, Java, JavaScript, Python, Perl, v.v. –

5

Thực ra, bạn cũng có thể sử dụng chế độ ngã ba.

gdb có hai lựa chọn thú vị liên quan đến hành vi ngã ba:
- detach-on-fork (set này là false)
- follow-on-fork (hoặc mẹ hoặc con, tôi luôn lấy con)

Điều này sẽ làm gdb theo các con quá trình. Khi quá trình con đã kết thúc, bạn phải tự chuyển về quy trình gốc bằng cách sử dụng lệnh inferior.

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