I'm a developer. How do I use these crash reports

Report format

apport內部使用標準的Debian 控制語法(就是保持所有資料都是人類看得懂的文字),像是如下:

DistroRelease: Ubuntu 12.04
ExecutablePath: /usr/bin/gcalctool
Package: gcalctool 5.8.24-0ubuntu2
ProcCmdline: gcalctool
ProcEnviron:
 SHELL=/bin/bash
 PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games
 LANG=de_DE.UTF-8
StackTrace:
 [...]
 #0  0x00002ae577bb37bf in poll () from /lib/libc.so.6
 No symbol table info available.
 #1  0x00002ae57786991e in g_main_context_check () from /usr/lib64/libglib-2.0.so.0
 No symbol table info available.
 [...]
CoreDump: base64
 eJzsXQmcFMXV7+XGA0dBREVoDxSPXQYEB...

你會發現會有需多的資訊可用,像是strace, Coredump資訊等等。但是在上傳這bug report到bug tracking system時,就會用到不一樣的格式了(舉例來說,如果是使用Launchpad,上傳資料將會是Multipart/MIME格式)。

Fields

有幾個欄位會有更進階的訊息:

  • SegvAnalysis: 當檢查Segmentation Fault(Signal 11)時,apport會去檢視機器指令(machine instruciton),和PC(Program counter),目標和來源位值(source and destination addresses),並且檢察是否有任何的虛擬記憶體(Virtual Memory Address)跨出他原本被分配的範圍。
  • SegvReason: 一個VMA可以被讀取,寫入和執行。如果再一個沒有被分配或者是沒有權限的VMA底下如果有底下三種CPU行為發生,將會有Segmentation Fault:
    • 讀取NULL的 VMA代表一個NULL point被 dereferenced
    • 將資料寫到未知的VMA,將有可能會寫到所配置的記憶體之外。
    • 執行一段可寫入的VMA[stack],代表有什麼去執行在stack上的code,但是這段stack應該沒有可執行的權限。

results matching ""

    No results matching ""