→ diabloevagto:assert, __LINE__ 11/23 10:08
→ applecool:此路不通 11/23 13:17
推 yvb:backtrace() ? 11/23 14:52
→ applecool:阿!!!大概就是這個,我研究看看~~~感恩啊 11/23 17:31
推 yvb:補充一下, backtrace() 只是 addresses, 11/23 17:35
→ applecool:沒關係,有address 已經很好用了,我只擔心兩件事而已 11/23 17:37
→ yvb:搭配編譯 -rdynamic 和 backtrace_symbols() 可印 func+offset 11/23 17:37
→ applecool:因為我不想 symbol 外漏,所以不會加上那選項 11/23 17:38
→ applecool:可是這樣會不會讓原本藏得起來的部分 symbol 外漏??? 11/23 17:38
→ yvb:而搭配編譯 -g 及 addr2line 程式, 可印出 source 行號等. 11/23 17:39
→ applecool:因為我要把訊息 bt 的結果印出來 11/23 17:39
→ applecool:但是無論如何都不想有 symbol 被看見 XD 11/23 17:39
→ applecool:感激不盡阿 11/23 17:39
→ yvb:release 出去的檔案 strip 過就可以了, 自己留 -g 的. 11/23 17:40
→ yvb:然後就不要用 -rdynamic backtrace_symbols() 的方式. 11/23 17:41
→ applecool:是阿可是我想要 release -g 的出去 11/23 17:42
→ applecool:不過看起來是不行了 一定不能有 -g 11/23 17:45
→ applecool:感謝感謝啊!!! 11/23 17:45
→ yvb:用 -g 的, 別人就可看到 symbols... 11/23 17:45
→ yvb:反正印出 addresses 就夠了, log 拿回來再用 addr2line, 11/23 17:46
→ applecool:嗯嗯沒錯啊~~ 請問 string nm 完之後沒有就保證 OK 了嗎 11/23 17:46
→ yvb:搭配自己 -g 未 strip 過的, 就可以看到行號等資訊了. 11/23 17:46
→ applecool:請問我可以單抓 address 不設 -g ??? 11/23 17:47
→ yvb:試試看 strings -a exe-file, 可能還是看得到一點東西, 11/23 17:49
→ applecool:那如果這招用完重要的 symbol 都不見了,就保證藏住了? 11/23 17:50
→ yvb:但又如何? 應該還好吧... 11/23 17:50
→ applecool:有人在意阿~ 11/23 17:52
→ yvb:如果是 exe, 自己的 func, var 等應該在 strip 後就不見了, 11/23 17:55
→ yvb:但叫用的 printf 等 lib 名稱總是會在的. 11/23 17:55
→ yvb:如果是 libxx.so, 那 export 出去的還是要看得到,不然就無法用 11/23 17:56
→ yvb:所以自己留 -g, 不要用-rdynamic, 而 rel 的要 strip 就對了. 11/23 17:57
→ applecool:恩恩這我了解 不過看起來backtrace一定要 -g 11/23 17:59
推 yvb:所以要有兩份, 一份自用有symbols(-g),一份給人用是strip過的. 11/23 18:06
→ applecool:但 strip 還能 call backtrace()? 11/23 18:10
推 yvb:當然可以, 因為 backtrace() 只是讀出 addresses 而已. 11/23 19:59
→ yvb:要看 source 的 file, func, line number 等, 11/23 19:59
→ yvb:則是用 addr2line 給 address 參數, 搭配未 strip過的執行檔, 11/23 20:01
→ yvb:(也就是你自留的執行檔, 不是給別人那份), 才可以印出來. 11/23 20:03
→ applecool:喔喔了解,感謝 11/23 21:07
→ applecool:所以您的意思就是我使用 backtrace 然後不加 -g 11/23 21:08
→ applecool:最後再 strip 這樣就能保護 symbol 11/23 21:08
→ applecool:然後我 call backtrace() 只會輸出 address 11/23 21:09
→ applecool:不會有 symbol 和 source code,請問我這樣的理解正確嗎 11/23 21:10
推 yvb:可加-g(留自己debug用). strip及後的描述都對(重點就是strip). 11/23 22:15
→ yvb:當然, 如果你開發工具及函式庫等都未變動的情況下,重編譯加-g 11/23 22:19
→ yvb:應該還是能編出一樣的東西; 但如果有所更動, 可能重編後, 11/23 22:20
→ yvb:位址和行數對應可能就改了,所以建議留一份code和-g的執行檔. 11/23 22:22
→ applecool:感謝感謝!!!所以加不加 -g 對於 backtrace() 的影響 11/24 11:48
→ applecool:在於加了 -g 會有 souce + line, 不加只有 address ??? 11/24 11:48
→ applecool:真的很抱歉問題很多 11/24 11:49
推 yvb:-g 是執行檔會包含 debug info, 讓你可以 debug 工具做些事. 11/24 23:30
→ yvb:但 backtrace() 一定只是抓出 addresses, 11/24 23:32
→ yvb:根據 addresses 和 debug info, debug 工具才能得知 src+line. 11/24 23:33
→ applecool:了解!十分感謝!!! 11/25 09:58
→ applecool:總之就是我不要加 -g 只要 backtrace() 11/25 09:59
→ applecool:就無須擔心 user 會看到 symbol 或 source 就是了???? 11/25 10:00
推 yvb:還是要 strip 過. 請自行用 strings 和 nm 確認. 11/26 00:12
→ applecool:感激~~ 12/07 15:37