2009-12-01 107 views
1

就像在主題 - 是否有任何軟件可以打開(什麼?),這裏我甚至不知道要打開什麼 - 使用目標代碼或exe文件? 我今天的問題(如果只有今天;))可能看起來有點奇怪,但我正在通過B.S的「The C++ Programming Language」中的excersises。有時候我只是停留在特定的問題上。我有時會被這本書的風格(很多方面都很出色)所困擾,他(B.S.)提出了一些問題,在他的書中如何去做,甚至從哪裏開始,都找不到答案。 像這樣一個例子:如何檢查由C++編譯器生成的代碼?

運行一些測試,看看你的編譯器是否真的生成等價的代碼迭代使用指針和迭代使用索引。如果可以請求不同程度的opimization,請查看是否以及如何影響生成的代碼的質量。

這就是第5章問題8.在本書中甚至沒有提到測試和分析編譯器生成的代碼。 無論如何,如果有人可以幫助我,我會很高興。 謝謝。

回答

5

調試器將幫助你。大多數調試器讓你暫停程序並查看反彙編。好的是,他們指出你正確的反彙編你設置斷點的行,而不是所有的編譯結果。

有一段時間我在Visual Studio中這樣做 - 編譯程序,將一個斷點放到感興趣的代碼的開頭,啓動程序,然後當它停止時,打開反彙編,立即看到對應的代碼那C++代碼。

+0

謝謝。爲什麼評論至少需要15個字符。我只是想說謝謝,但不會讓我這麼做。可憐!!!! – 2009-12-01 11:58:21

+0

+1。編程的新手並不總是意識到調試器的實用性,特別是在仍然學習編程的時候。 – MSalters 2009-12-01 14:09:18

0

許多編譯器都可以生成彙編代碼中生成的彙編代碼的「列表」文件,並與C源代碼中的語句交織在一起。此外,還有反彙編對象和可執行文件的工具。

這些工具如何實際激活取決於您的工具鏈,顯然。

2

如果你使用的是g ++,你可以做g++ -S main.cpp。這將在一個名爲main.s的文件中輸出程序集。但是,如果您感興趣的功能分佈在不同的.cpp文件中,那麼在最終的可執行文件上執行objdump可能會更方便。

還有一個很好的工具叫embroider,它可以把你的objdump輸出打印成HTML,交織各種函數調用和跳轉。