2012-02-23 29 views
8

Tôi có một mã cơ sở mã C cũ khá lớn trên một hệ thống nhúng và rất tiếc không có trường hợp/bộ thử nghiệm tự động nào. Điều này làm cho việc tái cơ cấu và tái cấu trúc mã là một nhiệm vụ nguy hiểm.Truy tìm cuộc gọi và tham số chức năng C - trường hợp thử nghiệm và tạo mô hình

Viết thủ công các trường hợp thử nghiệm rất tốn thời gian, vì vậy tôi cho rằng có thể tự động hóa ít nhất một phần của quá trình này bằng cách truy tìm tất cả các cuộc gọi hàm và ghi các giá trị đầu vào và đầu ra. Sau đó tôi có thể sử dụng các giá trị này trong các trường hợp thử nghiệm (điều này sẽ không làm việc cho tất cả nhưng ít nhất là đối với một số chức năng). Nó có lẽ cũng sẽ có thể tạo ra các chức năng giả dựa trên dữ liệu thu thập được.

Có trường hợp kiểm tra như vậy sẽ làm cho việc tái cấu trúc hoạt động ít nguy hiểm hơn.

Có bất kỳ giải pháp nào đã có thể thực hiện việc này không? Điều gì sẽ là cách dễ nhất để có được điều này để làm việc nếu tôi đã phải mã nó bản thân mình?

Tôi đã nghĩ về việc sử dụng ctags để tìm định nghĩa hàm và gói chúng trong một hàm ghi lại các giá trị tham số. Một khả năng khác có lẽ sẽ là một trình biên dịch gcc plugin.

+0

bạn có nghĩ câu hỏi này thuộc về superuser.com ... ?? –

+2

@ Mr.32: Đây là một câu hỏi liên quan đến lập trình, vì vậy nó chắc chắn thuộc về đây. –

Trả lời

1

Có tùy chọn gcc "-finstrument-functions", bạn có thể sử dụng cơ chế nào để xác định số lần gọi lại của riêng bạn cho mỗi lần nhập/thoát của chức năng.

Google và bạn có thể tìm thấy nhiều ví dụ hay.

[Chỉnh sửa] với lệnh gọi của tùy chọn gcc này, bạn chỉ có thể theo dõi mục nhập/thoát của hàm, chứ không chỉ các thông số. nhưng với một số thủ thuật bạn cũng có thể theo dõi các thông số. (đi qua con trỏ khung hiện tại để lấy param trên stack).

Dưới đây là một talk bài viết về ý tưởng của việc thực hiện:

http://linuxgazette.net/151/melinte.html

Bên cạnh đó, phụ thuộc vào hệ thống nhúng của bạn, trên linux bạn có thể thử một cái gì đó giống như ltrace để hiển thị các params (như cách strace). Có nhiều công cụ làm theo dõi hàm hoạt động trong không gian người dùng hoặc kernelspace trên linux, ftrace/ust/ltrace/utrace/strace/systemtap /. Dù sao, nếu bạn không thêm bất kỳ mã gỡ rối nào, bạn không thể hiển thị các thông số theo cách chính xác. Nếu bạn chấp nhận những nỗ lực để thêm thông tin gỡ lỗi nhập/thoát, thì việc này dễ dàng hơn nhiều.

Cũng ở đây là một chủ đề tương tự nói về vấn đề này.

Tool to trace local function calls in Linux

+0

Điều này là rất thú vị nhưng tiếc là tôi không thể nhìn thấy làm thế nào tôi sẽ có thể truy cập và lưu trữ các tham số chức năng ban đầu và giá trị trả lại. Điều này thậm chí có thể với phần mở rộng trình biên dịch này? – trenki

+0

Cảm ơn. Tôi phải xem liệu tôi có thể làm việc này cho bộ vi xử lý MIPS không. – trenki

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