มันเป็นไปได้ที่จะตรวจสอบว่าโปรแกรมที่กำหนดได้รับการรวบรวมกับ GNU gprof วัดคือมี '-pg' ธงส่งผ่านไปยังทั้งคอมไพเลอร์และลิงเกอร์, โดยไม่ต้องใช้มันเพื่อตรวจสอบว่ามันจะสร้างgmon.outไฟล์?
มันเป็นไปได้ที่จะตรวจสอบว่าโปรแกรมที่กำหนดได้รับการรวบรวมกับ GNU gprof วัดคือมี '-pg' ธงส่งผ่านไปยังทั้งคอมไพเลอร์และลิงเกอร์, โดยไม่ต้องใช้มันเพื่อตรวจสอบว่ามันจะสร้างgmon.outไฟล์?
คำตอบ:
คุณสามารถตรวจสอบการอ้างอิงถึงฟังก์ชั่นmcount(หรืออาจจะเป็น_mcountหรือ__mcountตามการใช้งานของการทำโปรไฟล์ ) ฟังก์ชันนี้จำเป็นสำหรับการทำโปรไฟล์ให้ทำงานและควรขาดสำหรับไบนารีที่ไม่ได้ทำโปรไฟล์
สิ่งที่ต้องการ:
$ readelf -s someprog | egrep "\s(_+)?mcount\b" && echo "Profiling is on for someprog"
การทดสอบข้างต้นใช้งานได้อย่างรวดเร็วที่นี่
การแสดงออกปกติในคำตอบข้างต้นไม่ได้ผลเสมอไป ... แต่แนวคิดทั่วไปของการ grepping สำหรับ "mcount" ในผลลัพธ์ของ 'readelf -s [binary]' ถูกต้องฉันคิดว่า
การเพิ่มคำตอบให้มากขึ้น:
ในการตรวจสอบเครื่องมือวัด, 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    
ต้องรวบรวมและเชื่อมโยงกับ-pgธงมิฉะนั้นgmon.outจะไม่ถูกสร้างขึ้น ลิงค์สแต็คโอเวอร์โฟลว์
ฉันพบว่าไบนารีที่ฉันใช้ gprof ไม่ได้สร้างgmon.outไฟล์ใด ๆ   แม้จะรวบรวม / เชื่อมโยงกับ-pgค่าสถานะ เหตุผล - ฉันกำลังฆ่าใบสมัครของฉันมันไม่ใช่ทางออกที่สะอาด gprofสร้างเอาต์พุตเฉพาะเมื่อโปรแกรมออกจากปกติ ลิงค์สแต็คโอเวอร์โฟลว์