Phát hiện nếu một nhị phân ELF được xây dựng với thiết bị gprof?


11

Có thể kiểm tra xem chương trình đã cho có được biên dịch bằng công cụ GNU gprof không, tức là với cờ '-pg' được truyền cho cả trình biên dịch và trình liên kết, mà không chạy nó để kiểm tra xem nó có tạo gmon.outtệp không?

Câu trả lời:


10

Bạn có thể kiểm tra các tham chiếu đến chức năng mcount(hoặc có thể _mcounthoặc __mcounttheo Thực hiện Hồ sơ ). Chức năng này là cần thiết để định hình để làm việc, và nên vắng mặt cho các nhị phân không định hình.

Cái gì đó như:

$ readelf -s someprog | egrep "\s(_+)?mcount\b" && echo "Profiling is on for someprog"

Các công việc trên trên một bài kiểm tra nhanh ở đây.


2

Biểu thức chính quy trong câu trả lời ở trên không phải lúc nào cũng hoạt động ... nhưng tôi nghĩ rằng ý tưởng chung về việc grepping cho "mcount" trong đầu ra của 'readelf -s [binary]' là chính xác, tôi nghĩ


0

Thêm nhiều hơn vào câu trả lời:

  1. Để kiểm tra thiết bị, grep cho mcount / gmon:

    $  readelf -s <binary> | egrep "gmon|mcount"    
    20: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@GLIBC_2.2.5 (2)    
    36: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS gmon-start.c    
    39: 00000000004011a0     0 FUNC    LOCAL  DEFAULT   12 call_gmon_start    
    100: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    114: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@@GLIBC_2.2.5    
    
  2. Người ta cần biên dịch cũng như liên kết với -pgcờ, nếu không gmon.outsẽ không được tạo. liên kết stackoverflow.

  3. Tôi thấy rằng tệp nhị phân mà tôi đang chạy gprof không tạo ra bất kỳ gmon.outtệp nào , mặc dù biên dịch / liên kết với -pgcờ. Lý do là - tôi đã giết ứng dụng của mình, đó không phải là một lối thoát sạch sẽ. gprofchỉ tạo đầu ra khi chương trình thoát bình thường. liên kết stackoverflow

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.