簡體   English   中英

嘗試使用gdb調試LLVM傳遞時,gdb說找不到調試符號嗎?

[英]Trying to debug an LLVM pass with gdb , gdb says no debugging symbols found ?

我想用gdb調試我的LLVM傳遞。 我已經使用默認的make構建了llvm,因此應該添加調試信息。

當我做gdb user / bin / opt時,它說:

從opt讀取符號...(未找到調試符號)...完成。

這不應該發生,因為根據LLVM文檔,“ opt有很多調試信息”

http://llvm.org/docs/WritingAnLLVMPass.html#debughints

這是因為我沒有正確構建LLVM嗎? 任何幫助,將不勝感激。

找出完成此操作的完整方法:->

首先,請確保使用調試選項編譯LLVM,該選項基本上是默認設置。 如果您未使用非默認選項編譯LLVM,則當前的版本應該可以。

所有LLVM通道均使用LLVM的opt(優化程序)工具運行。 將通行證編譯為共享對象文件,即build / lib中的LLVMHello.so文件,然后由opt工具加載。 要調試或逐步執行過程,我們必須在開始執行.so文件之前停止LLVM,因為無法在共享對象文件中放置斷點。 取而代之的是,我們可以在代碼調用通行證之前將其中斷。

我們將在llvm / lib / IR / Pass.cpp中設置一個斷點

這樣做的方法如下:

步驟1->導航至build / bin並打開終端,然后鍵入gdb opt。 如果使用添加的調試符號編譯了llvm,則gdb將花費一些時間來加載調試符號,否則gdb會說正在加載調試符號...(未找到調試符號)。

步驟2->現在,我們需要在Pass.cpp中的void Pass :: preparePassManager(PMStack&)方法處設置一個斷點。 這可能是加載過程中涉及的第一個(或第一個)方法。 您可以通過在終端中輸入break llvm :: Pass :: preparePassManager來實現。

步驟3->運行通行證。 我有一個名為trial.bc的位代碼文件,並且傳遞了相同的LLVMHello.so,所以我使用

運行-load〜/ llvm / build / lib / LLVMHello.so -hello <〜/ llvmexamples / trial.bc> / dev / null

gdb現在將在Pass :: preparePassManager處停止,從這里我們可以使用step和next來跟蹤執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM