[英]GDB complains No Source Available
我正在使用Ubuntu 12.10 64bit。
我正在嘗試在GDB中調試一個簡單的匯編程序。 但是GDB的gui模式(-tui)似乎無法找到我的匯編文件的源代碼。 我在目前的目錄中重建了該項目並搜索谷歌無濟於事,請在這里幫助我。
我的命令:
nasm -f elf64 -g -F dwarf hello.asm
gcc -g hello.o -o hello
gdb -tui hello
似乎加載了調試信息,我可以在main()處設置斷點,但屏幕的上半部分仍然顯示' [No Source Available] '。
如果你有興趣,這是hello.asm:
; hello.asm a first program for nasm for Linux, Intel, gcc
;
; assemble: nasm -f elf -l hello.lst hello.asm
; link: gcc -o hello hello.o
; run: hello
; output is: Hello World
SECTION .data ; data section
msg: db "Hello World",10 ; the string to print, 10=cr
len: equ $-msg ; "$" means "here"
; len is a value, not an address
SECTION .text ; code section
global main ; make label available to linker
main: ; standard gcc entry point
mov edx,len ; arg3, length of string to print
mov ecx,msg ; arg2, pointer to string
mov ebx,1 ; arg1, where to write, screen
mov eax,4 ; write command to int 80 hex
int 0x80 ; interrupt 80 hex, call kernel
mov ebx,0 ; exit code, 0=normal
mov eax,1 ; exit command to kernel
int 0x80 ; interrupt 80 hex, call kernel
這句話是錯誤的。
匯編程序確實生成行號信息(注意-g -F矮人)位。
另一方面,他將明顯的32位代碼組裝為64位,這可能有效,也可能無效。
現在,如果NASM的調試輸出中存在錯誤,我們需要知道。
幾個快速實驗表明,addr2line(但不是gdb!) 確實使用stabs正確解碼NASM生成的行號信息,但不使用dwarf,因此NASM生成DWARF的方式可能有些不對... GDB。
GNU addr2line版本2.22.52.0.1-10.fc17 20120131,GNU gdb(GDB)Fedora(7.4.50.20120120-52.fc17))。
這種情況下的問題是匯編程序沒有為調試器生成行號信息。 所以盡管源代碼存在(如果你在gdb中執行“list”,它會顯示源文件的列表 - 至少當我按照你的步驟進行時,它確實如此),但調試器需要從文件中獲取行號信息才能知道什么線對應於什么地址。 它不能用給出的信息做到這一點。
至於我能找到,沒有辦法讓NASM發行所使用的.loc指令as
當使用gcc
的例子。 但是as
無法在不產生大量錯誤的情況下獲取源文件[即使使用-msyntax = intel -mmnemonic = intel - 你會認為這應該有效]。
因此,除非有更聰明的人能想出一種生成.loc條目的方法來提供調試器行號信息,否則我不能完全確定我們如何能夠以您滿意的方式回答您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.