# 打印進程內存信息
## 技巧
用gdb調試程序時,如果想查看進程的內存映射信息,可以使用“i proc mappings”命令(i是info命令縮寫),例如:
(gdb) i proc mappings
process 27676 flags:
PR_STOPPED Process (LWP) is stopped
PR_ISTOP Stopped on an event of interest
PR_RLC Run-on-last-close is in effect
PR_MSACCT Microstate accounting enabled
PR_PCOMPAT Micro-state accounting inherited on fork
PR_FAULTED : Incurred a traced hardware fault FLTBPT: Breakpoint trap
Mapped address spaces:
Start Addr End Addr Size Offset Flags
0x8046000 0x8047fff 0x2000 0xfffff000 -s--rwx
0x8050000 0x8050fff 0x1000 0 ----r-x
0x8060000 0x8060fff 0x1000 0 ----rwx
0xfee40000 0xfef4efff 0x10f000 0 ----r-x
0xfef50000 0xfef55fff 0x6000 0 ----rwx
0xfef5f000 0xfef66fff 0x8000 0x10f000 ----rwx
0xfef67000 0xfef68fff 0x2000 0 ----rwx
0xfef70000 0xfef70fff 0x1000 0 ----rwx
0xfef80000 0xfef80fff 0x1000 0 ---sr--
0xfef90000 0xfef90fff 0x1000 0 ----rw-
0xfefa0000 0xfefa0fff 0x1000 0 ----rw-
0xfefb0000 0xfefb0fff 0x1000 0 ----rwx
0xfefc0000 0xfefeafff 0x2b000 0 ----r-x
0xfeff0000 0xfeff0fff 0x1000 0 ----rwx
0xfeffb000 0xfeffcfff 0x2000 0x2b000 ----rwx
0xfeffd000 0xfeffdfff 0x1000 0 ----rwx
首先輸出了進程的flags,接著是進程的內存映射信息。
參見[gdb手冊](https://sourceware.org/gdb/onlinedocs/gdb/SVR4-Process-Information.html#index-info-proc-exe).
此外,也可以用"i files"(還有一個同樣作用的命令:“i target”)命令,它可以更詳細地輸出進程的內存信息,包括引用的動態鏈接庫等等,例如:
(gdb) i files
Symbols from "/data1/nan/a".
Unix /proc child process:
Using the running image of child Thread 1 (LWP 1) via /proc.
While running this, GDB does not access memory from...
Local exec file:
`/data1/nan/a', file type elf32-i386-sol2.
Entry point: 0x8050950
0x080500f4 - 0x08050105 is .interp
0x08050108 - 0x08050114 is .eh_frame_hdr
0x08050114 - 0x08050218 is .hash
0x08050218 - 0x08050418 is .dynsym
0x08050418 - 0x080507e6 is .dynstr
0x080507e8 - 0x08050818 is .SUNW_version
0x08050818 - 0x08050858 is .SUNW_versym
0x08050858 - 0x08050890 is .SUNW_reloc
0x08050890 - 0x080508c8 is .rel.plt
0x080508c8 - 0x08050948 is .plt
......
0xfef5fb58 - 0xfef5fc48 is .dynamic in /usr/lib/libc.so.1
0xfef5fc80 - 0xfef650e2 is .data in /usr/lib/libc.so.1
0xfef650e2 - 0xfef650e2 is .bssf in /usr/lib/libc.so.1
0xfef650e8 - 0xfef65be0 is .picdata in /usr/lib/libc.so.1
0xfef65be0 - 0xfef666a7 is .data1 in /usr/lib/libc.so.1
0xfef666a8 - 0xfef680dc is .bss in /usr/lib/libc.so.1
參見[gdb手冊](https://sourceware.org/gdb/onlinedocs/gdb/Files.html)
## 貢獻者
nanxiao
- 版權
- 內容
- 調整窗口大小
- 一個gdb會話中同時調試多個程序
- 調試已經運行的進程
- 在匿名空間設置斷點
- 在程序地址上打斷點
- 在程序入口處打斷點
- 在函數的第一條匯編指令打斷點
- 在文件行號上打斷點
- 使用斷點命令改變程序的執行
- 直接執行函數
- 為exec調用設置catchpoint
- 為fork調用設置catchpoint
- 為ptrace調用設置catchpoint
- 為系統調用設置catchpoint
- 為vfork調用設置catchpoint
- 改變字符串的值
- 配置gdb init文件
- 設置源文件查找路徑
- 自動反匯編后面要執行的代碼
- 顯示程序原始機器碼
- 顯示將要執行的匯編指令
- 打印內存的值
- 退出正在調試的函數
- 為調試進程產生core dump文件
- 得到命令的幫助信息
- 忽略斷點
- 信息顯示
- 打印函數堆棧幀信息
- 列出函數的名字
- 查看信號處理信息
- 顯示共享鏈接庫信息
- 跳轉到指定位置執行
- 顯示匯編代碼窗口
- 顯示寄存器窗口
- 加載可執行程序和core dump文件
- 打印程序進程空間信息
- 在Solaris上使用maintenance命令查看線程信息
- 將源程序和匯編指令映射起來
- 修改PC寄存器的值
- 命令行選項的格式
- 信號發生時是否把信號丟給程序處理
- 修改被調試程序的二進制文件
- 支持預處理器宏信息
- 打印STL容器中的內容
- 打印數組的索引下標
- 打印ASCII和寬字符字符串
- 打印數組中任意連續元素值
- 按照派生類型打印對象
- 打印調用棧幀中變量的值
- 打印大數組中的內容
- 打印函數局部變量的值
- 打印程序動態分配內存的信息
- 打印進程內存信息
- 打印寄存器的值
- 信號發生時是否打印信號信息
- 打印源代碼行
- 打印靜態變量的值
- 查看線程信息
- 打印變量的類型和所在文件
- gdb退出時不顯示提示信息
- 在gdb中執行cd和pwd命令
- 在gdb中執行shell命令和make
- 保存已經設置的斷點
- 保存歷史命令
- 選擇函數堆棧幀
- 給程序發送信號
- 設置條件斷點
- 打印尾調用堆棧幀信息
- 同時調試父進程和子進程
- 設置匯編指令格式
- 調試子進程
- 指定程序的輸入輸出設備
- 記錄執行gdb的過程
- 輸出信息多時不會暫停輸出
- 每行打印一個結構體成員
- 設置被調試程序的參數
- 設置命令提示符
- 設置命令提示符
- 設置讀觀察點
- 設置讀寫觀察點
- 只允許一個線程運行
- 按何種方式解析腳本文件
- 進入不帶調試信息的函數
- 設置臨時斷點
- 設置變量的值
- 設置觀察點只針對特定線程生效
- 設置觀察點
- 顯示gdb版權相關信息
- 不顯示線程啟動和退出信息
- 顯示gdb版本信息
- 啟動時不顯示提示信息
- 是否進入帶調試信息的函數
- 信號發生時是否暫停程序
- 替換查找源文件的目錄
- 讓catchpoint只觸發一次
- 進入和退出圖形化調試界面
- 向上或向下切換函數堆棧幀
- 使用“$_”和“$__”變量
- 使用“$_exitcode”變量
- 使用“$_siginfo”變量
- 使用“$_thread”變量
- 使用命令的縮寫形式