มันเป็นไปได้ที่จะตรวจสอบว่าโปรแกรมที่กำหนดได้รับการรวบรวมกับ 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
สร้างเอาต์พุตเฉพาะเมื่อโปรแกรมออกจากปกติ ลิงค์สแต็คโอเวอร์โฟลว์