2015-12-05 52 views
0

這裏我的輸出,我不明白十六進制「0xe8」和「0x7f8c783ac74d」;如何看到紅寶石c擴展回溯信息

/home/roroco/Dropbox/rbs/ro_article/c/ro_helper_article.so(get_article_n2+0xe8) [0x7f8c783ac74d] 

here是完整的輸出

+0

我們需要更多的上下文。這是如何產生的,它應該是什麼,你想用它來做什麼,你到目前爲止確定什麼是十六進制值?你應該在問題中完全描述你的問題,而不是將問題的重要信息和標題分開。 – JRsz

回答

1

它看起來就像你引起的(或者更確切地說,一個插件引起)紅寶石段錯誤。這通常意味着你試圖訪問你指定範圍之外的內存 - 基本上,你的程序真的很奇怪。您專門挑選的行實際上是一個C庫 - .so擴展意味着「static object」,並鏈接到主ruby可執行文件。它提供的信息告訴你錯誤來自何處 - 但是,大多數生產庫不包含諸如「文件名」和「行號」之類的信息。相反,它們包含一個list of symbols。在你的情況下,它會告訴你在靜態對象中發生錯誤的位置 - 在get_article_n2符號之後的0xe8字節 - 或者在地址0x7f8c783ac74d處。

所以現在你有幾個選擇。

  1. 你可以在你的源代碼盲目地閒逛(我假設你寫的是錯誤的,這裏的圖書館,因爲它似乎這就是你要測試什麼),並嘗試和猜測段錯誤源自哪裏。您已經知道它在函數get_article_n2中,考慮到在該符號之後產生的錯誤。

  2. 您可以反彙編靜態對象以查看導致錯誤的特定指令,然後嘗試將其映射到源代碼。

  3. 您可以啓用調試,並讓您的構建系統輸出文件名和行號,以便您知道您在看什麼。 (免責聲明:我不確定這是否會起作用;它看起來並不像是向我發送調試信息,但我不確定您是否是;即使您是,我也不是確定它會被用來輸出,但這似乎是最簡單的方法。)