ตรวจสอบว่า ELF ไบนารีถูกสร้างขึ้นด้วยเครื่องมือ gprof หรือไม่


11

มันเป็นไปได้ที่จะตรวจสอบว่าโปรแกรมที่กำหนดได้รับการรวบรวมกับ GNU gprof วัดคือมี '-pg' ธงส่งผ่านไปยังทั้งคอมไพเลอร์และลิงเกอร์, โดยไม่ต้องใช้มันเพื่อตรวจสอบว่ามันจะสร้างgmon.outไฟล์?

คำตอบ:


10

คุณสามารถตรวจสอบการอ้างอิงถึงฟังก์ชั่นmcount(หรืออาจจะเป็น_mcountหรือ__mcountตามการใช้งานของการทำโปรไฟล์ ) ฟังก์ชันนี้จำเป็นสำหรับการทำโปรไฟล์ให้ทำงานและควรขาดสำหรับไบนารีที่ไม่ได้ทำโปรไฟล์

สิ่งที่ต้องการ:

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

การทดสอบข้างต้นใช้งานได้อย่างรวดเร็วที่นี่


2

การแสดงออกปกติในคำตอบข้างต้นไม่ได้ผลเสมอไป ... แต่แนวคิดทั่วไปของการ grepping สำหรับ "mcount" ในผลลัพธ์ของ 'readelf -s [binary]' ถูกต้องฉันคิดว่า


0

การเพิ่มคำตอบให้มากขึ้น:

  1. ในการตรวจสอบเครื่องมือวัด, grep สำหรับ 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. ต้องรวบรวมและเชื่อมโยงกับ-pgธงมิฉะนั้นgmon.outจะไม่ถูกสร้างขึ้น ลิงค์สแต็คโอเวอร์โฟลว์

  3. ฉันพบว่าไบนารีที่ฉันใช้ gprof ไม่ได้สร้างgmon.outไฟล์ใด ๆ แม้จะรวบรวม / เชื่อมโยงกับ-pgค่าสถานะ เหตุผล - ฉันกำลังฆ่าใบสมัครของฉันมันไม่ใช่ทางออกที่สะอาด gprofสร้างเอาต์พุตเฉพาะเมื่อโปรแกรมออกจากปกติ ลิงค์สแต็คโอเวอร์โฟลว์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.