国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

在 Linux 上創建并調試轉儲文件

系統 Linux
崩潰轉儲、內存轉儲、核心轉儲、系統轉儲……這些全都會產生同樣的產物:一個包含了當應用崩潰時,在那個特定時刻應用的內存狀態的文件。

崩潰轉儲、內存轉儲、核心轉儲、系統轉儲……這些全都會產生同樣的產物:一個包含了當應用崩潰時,在那個特定時刻應用的內存狀態的文件。

這是一篇指導文章,你可以通過克隆示例的應用倉庫來跟隨學習:

git clone https://github.com/hANSIc99/core_dump_example.git

[[339945]]

信號如何關聯到轉儲

信號是操作系統和用戶應用之間的進程間通訊。Linux 使用 POSIX 標準中定義的信號。在你的系統上,你可以在 /usr/include/bits/signum-generic.h 找到標準信號的定義。如果你想知道更多關于在你的應用程序中使用信號的信息,這有一個信息豐富的 signal 手冊頁。簡單地說,Linux 基于預期的或意外的信號來觸發進一步的活動。

當你退出一個正在運行的應用程序時,應用程序通常會收到 SIGTERM 信號。因為這種類型的退出信號是預期的,所以這個操作不會創建一個內存轉儲。

以下信號將導致創建一個轉儲文件(來源:GNU C庫):

  • SIGFPE:錯誤的算術操作
  • SIGILL:非法指令
  • SIGSEGV:對存儲的無效訪問
  • SIGBUS:總線錯誤
  • SIGABRT:程序檢測到的錯誤,并通過調用 abort() 來報告
  • SIGIOT:這個信號在 Fedora 上已經過時,過去在 PDP-11 上用 abort() 時觸發,現在映射到 SIGABRT

創建轉儲文件

導航到 core_dump_example 目錄,運行 make,并使用 -c1 開關執行該示例二進制:

  1. ./coredump -c1 

該應用將以狀態 4 退出,帶有如下錯誤:

Dump written“Abgebrochen (Speicherabzug geschrieben) ”(LCTT 譯注:這是德語,應該是因為本文作者系統是德語環境)大致翻譯為“分段故障(核心轉儲)”。

是否創建核心轉儲是由運行該進程的用戶的資源限制決定的。你可以用 ulimit 命令修改資源限制。

檢查當前創建核心轉儲的設置:

  1. ulimit -c 

如果它輸出 unlimited,那么它使用的是(建議的)默認值。否則,用以下方法糾正限制:

  1. ulimit -c unlimited 

要禁用創建核心轉儲,可以設置其大小為 0:

  1. ulimit -c 0 

這個數字指定了核心轉儲文件的大小,單位是塊。

什么是核心轉儲?

內核處理核心轉儲的方式定義在:

  1. /proc/sys/kernel/core_pattern 

我運行的是 Fedora 31,在我的系統上,該文件包含的內容是:

  1. /usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h 

這表明核心轉儲被轉發到 systemd-coredump 工具。在不同的 Linux 發行版中,core_pattern 的內容會有很大的不同。當使用 systemd-coredump 時,轉儲文件被壓縮保存在 /var/lib/systemd/coredump 下。你不需要直接接觸這些文件,你可以使用 coredumpctl。比如說:

  1. coredumpctl list 

會顯示系統中保存的所有可用的轉儲文件。

使用 coredumpctl dump,你可以從最后保存的轉儲文件中檢索信息:

  1. [stephan@localhost core_dump_example]$ ./coredump  
  2. Application started… 
  3. (…….) 
  4. Message: Process 4598 (coredump) of user 1000 dumped core. 
  5. Stack trace of thread 4598: 
  6. #0 0x00007f4bbaf22625 __GI_raise (libc.so.6) 
  7. #1 0x00007f4bbaf0b8d9 __GI_abort (libc.so.6) 
  8. #2 0x00007f4bbaf664af __libc_message (libc.so.6) 
  9. #3 0x00007f4bbaf6da9c malloc_printerr (libc.so.6) 
  10. #4 0x00007f4bbaf6f49c _int_free (libc.so.6) 
  11. #5 0x000000000040120e n/a (/home/stephan/Dokumente/core_dump_example/coredump) 
  12. #6 0x00000000004013b1 n/a (/home/stephan/Dokumente/core_dump_example/coredump) 
  13. #7 0x00007f4bbaf0d1a3 __libc_start_main (libc.so.6) 
  14. #8 0x000000000040113e n/a (/home/stephan/Dokumente/core_dump_example/coredump) 
  15. Refusing to dump core to tty (use shell redirection or specify — output). 

這表明該進程被 SIGABRT 停止。這個視圖中的堆棧跟蹤不是很詳細,因為它不包括函數名。然而,使用 coredumpctl debug,你可以簡單地用調試器(默認為 GDB)打開轉儲文件。輸入 bt(回溯backtrace的縮寫)可以得到更詳細的視圖:

  1. Core was generated by `./coredump -c1'. 
  2. Program terminated with signal SIGABRT, Aborted. 
  3. #0  __GI_raise (sigsig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 
  4. 50  return ret; 
  5. (gdb) bt 
  6. #0  __GI_raise (sigsig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 
  7. #1  0x00007fc37a9aa8d9 in __GI_abort () at abort.c:79 
  8. #2  0x00007fc37aa054af in __libc_message (actionaction=action@entry=do_abortfmtfmt=fmt@entry=0x7fc37ab14f4b "%s\n") at ../sysdeps/posix/libc_fatal.c:181 
  9. #3  0x00007fc37aa0ca9c in malloc_printerr (strstr=str@entry=0x7fc37ab130e0 "free(): invalid pointer") at malloc.c:5339 
  10. #4  0x00007fc37aa0e49c in _int_free (av=<optimized out>p=<optimized out>have_lock=0) at malloc.c:4173 
  11. #5  0x000000000040120e in freeSomething(void*) () 
  12. #6  0x0000000000401401 in main () 

與后續幀相比,main() 和 freeSomething() 的內存地址相當低。由于共享對象被映射到虛擬地址空間末尾的區域,可以認為 SIGABRT 是由共享庫中的調用引起的。共享對象的內存地址在多次調用之間并不是恒定不變的,所以當你看到多次調用之間的地址不同時,完全可以認為是共享對象。

堆棧跟蹤顯示,后續的調用源于 malloc.c,這說明內存的(取消)分配可能出了問題。

在源代碼中,(即使沒有任何 C++ 知識)你也可以看到,它試圖釋放一個指針,而這個指針并沒有被內存管理函數返回。這導致了未定義的行為,并導致了 SIGABRT。

  1. void freeSomething(void *ptr){ 
  2.     free(ptr); 
  3. int nTmp = 5
  4. int *ptrNull = &nTmp; 
  5. freeSomething(ptrNull); 

systemd 的這個 coredump 工具可以在 /etc/systemd/coredump.conf 中配置。可以在 /etc/systemd/systemd-tmpfiles-clean.timer 中配置輪換清理轉儲文件。

你可以在其手冊頁中找到更多關于 coredumpctl 的信息。

用調試符號編譯

打開 Makefile 并注釋掉第 9 行的最后一部分。現在應該是這樣的:

  1. CFLAGS =-Wall -Werror -std=c++11 -g 

-g 開關使編譯器能夠創建調試信息。啟動應用程序,這次使用 -c2 開關。

  1. ./coredump -c2 

你會得到一個浮點異常。在 GDB 中打開該轉儲文件:

  1. coredumpctl debug 

這一次,你會直接被指向源代碼中導致錯誤的那一行:

  1. Reading symbols from /home/stephan/Dokumente/core_dump_example/coredump… 
  2. [New LWP 6218] 
  3. Core was generated by `./coredump -c2'. 
  4. Program terminated with signal SIGFPE, Arithmetic exception. 
  5. #0 0x0000000000401233 in zeroDivide () at main.cpp:29 
  6. 29 nRes = 5 / nDivider; 
  7. (gdb) 

鍵入 list 以獲得更好的源代碼概覽:

  1. (gdb) list 
  2. 24      int zeroDivide(){ 
  3. 25          int nDivider = 5
  4. 26          int nRes = 0
  5. 27          while(nDivider > 0){ 
  6. 28              nDivider--; 
  7. 29              nRes = 5 / nDivider; 
  8. 30          } 
  9. 31          return nRes; 
  10. 32      } 

使用命令 info locals 從應用程序失敗的時間點檢索局部變量的值:

  1. (gdb) info locals 
  2. nDivider = 0 
  3. nRes = 5 

結合源碼,可以看出,你遇到的是零除錯誤:

  1. nRes = 5 / 0 

結論

了解如何處理轉儲文件將幫助你找到并修復應用程序中難以重現的隨機錯誤。而如果不是你的應用程序,將核心轉儲轉發給開發人員將幫助她或他找到并修復問題。

 

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2018-08-19 09:45:19

Windows 10藍屏死機轉儲文件

2018-07-16 08:40:08

Linux段錯誤C++

2019-02-19 09:00:45

Linux創建文件命令

2021-04-24 06:26:43

SigilLinux EPUB文件

2021-04-14 15:25:39

Linux加密文件保險庫

2020-05-09 12:01:40

Linux開源軟件SDN

2012-08-01 14:29:03

IBMdW

2022-07-01 15:33:53

LinuxBash

2017-07-03 12:19:46

LinuxShell交換文件

2017-06-07 12:48:07

Linuxmimipenguin轉儲登錄

2018-06-25 13:10:16

Linux復制重命名

2023-03-21 12:52:05

Linux創建文件

2021-09-10 10:35:25

Linuxstat命令文件系統

2019-10-15 13:29:24

LinuxLinux命令

2021-07-18 11:43:58

Linux密碼加密

2015-03-30 11:34:19

LinuxFSlint

2019-09-16 11:40:49

Linux交換文件

2013-07-04 11:24:55

內存監控內存轉儲

2019-12-05 10:30:17

LinuxMultitail

2011-03-22 10:06:27

LinuxZFS
點贊
收藏

51CTO技術棧公眾號

日本在线观看网站| 亚洲色图欧美制服丝袜另类第一页| 九九久久久久99精品| 麻豆app在线观看| 粉嫩高潮美女一区二区三区| 国产91精品青草社区| 国精产品一区二区三区有限公司| 久久综合九色综合97婷婷女人| 超碰在线97av| 国产区精品区| 久久久久久久综合日本| 一区二区高清视频| 亚洲第一区色| 成人精品福利视频| 欧美久久亚洲| 日韩中文有码在线视频| 免费在线中文字幕| 色婷婷av一区二区三区软件| 激情视频免费网站| 成人激情综合网站| 18视频在线观看娇喘| 国产精一品亚洲二区在线视频| 国产成人精品免费视频大全最热 | 一区二区三区日本视频| 欧美日韩中字一区| www.亚洲资源| 精品视频全国免费看| 亚洲第一中文av| 国产精品网站一区| 草草久视频在线观看电影资源| youjizzjizz亚洲| 国产精品一二三视频| 97视频热人人精品免费| 鬼打鬼之黄金道士1992林正英| 伊人久久综合| 伊人情人网综合| 久久久精品国产99久久精品芒果 | 欧美成人性生活视频| 欧美网站一区二区| 波多野结衣中文在线| 亚洲视频一区二区三区| 高清久久一区| 成人www视频在线观看| 天堂在线看视频| 欧美日韩视频专区在线播放| 亚洲精品国产嫩草在线观看| 久久久久久久久久久久久久久久久久av | 91最新在线视频| 亚洲视频在线免费看| 日韩一区二区三区在线看| 成人免费大片黄在线播放| 国产一区二区精品在线观看| 青青草精品视频在线观看| 欧美日韩三级一区| 疯狂欧洲av久久成人av电影| 91九色精品视频| 99久久伊人久久99| 岛国视频免费在线观看| 尤物99国产成人精品视频 | 欧美日本高清视频| 亚洲视频在线免费| 中文字幕乱码免费| 亚洲福利视频导航| 国产一区二区三区黄网站| 成人午夜两性视频| 99视频超级精品| 麻豆免费在线| 国产乱子伦精品| 国产精品久久久99| 日本在线一区二区| 伊人久久大香线蕉av一区| 亚洲精品国产第一综合99久久| 美女做暖暖视频免费在线观看全部网址91| 亚洲成人久久久久| 在线成人黄色| 午夜在线网站| 国产精品日韩在线一区| 国产亚洲成aⅴ人片在线观看| 亚洲最新无码中文字幕久久| 久久久久久久久久久久久9999| 色就色 综合激情| 亚洲精品网址| 白白色在线发布| 国产三级精品三级在线专区| 日韩黄色碟片| 免费看a级黄色片| 亚洲18私人小影院| 国产视频一区不卡| 性欧美lx╳lx╳| 韩国中文字幕2020精品| 久久久福利视频| 日韩精品视频观看| 日本高清精品| 在线观看日韩视频| 国产精品69xx| 亚洲精品一区国产精品| 国产一级揄自揄精品视频| 美女尤物久久精品| 亚洲欧美在线成人| 曰韩少妇与小伙激情| 精品免费国产| 国产一区二区三区视频| 懂色av一区二区三区免费观看| 国产第一精品| 性欧美孕妇孕交| 国产成人精品日本亚洲11 | 男男互摸gay网站| 亚洲一区美女视频在线观看免费| 欧美一区二区三区公司| 精品无人码麻豆乱码1区2区 | 五月开心六月丁香综合色啪 | 亚洲视频三区| 亚洲精品乱码久久久久久蜜桃91| 精品国产一区二区三区久久| 亚洲精品亚洲人成人网在线播放| 午夜亚洲性色福利视频| 中文字幕亚洲在线观看| 日本在线免费看| 亚洲第一精品夜夜躁人人躁| 精品一区二区三区的国产在线播放| 奇米777日韩| 免费在线毛片网站| 99热手机在线观看| 午夜精品福利一区二区| 欧美在线观看网址综合| 国产精品99蜜臀久久不卡二区| 国产精品一区免费视频| 成人一区福利| 国产福利精品导航| 中文字幕人妻熟女人妻洋洋| 欧美日韩国产在线播放网站| 久久亚洲国产精品一区二区| 免费看日产一区二区三区 | 久久成人18免费网站| 婷婷综合在线观看| 国产精品色哟哟| 不卡视频在线观看| 韩国三级电影一区二区| 亚洲免费网址| 亚洲美女一区| 亚洲福利天堂| 99久久999| 九九热这里有精品| 精品精品导航| 福利在线视频网站| 日本高清中文字幕在线| 97在线观看免费高清视频| 成年人黄视频网站| 国产经典av| 日韩有码电影| 精品电影在线| 在线观看男女av免费网址| ****av在线网毛片| 波多野结衣在线播放| 丁香影院在线| 精品176极品一区| 交100部在线观看| 天堂va在线| 国产综合色区在线观看| 电影中文字幕一区二区| 林ゆな中文字幕一区二区| 精品一区二区三区在线 | 日韩精品影视| 99欧美视频| 久久 天天综合| 99久热这里只有精品视频免费观看| 日韩超碰人人爽人人做人人添| 精品在线播放| 欧美视频导航| 国产99精品视频| 亚洲va欧美va人人爽午夜| 在线播放国产精品二区一二区四区| 亚洲黄色有码视频| 欧美激情综合色综合啪啪五月| 国产精品久久久久久久久久| 日本在线观看一区| 日韩毛片在线免费看| 69久久久久| 日韩高清一级| 亚洲在线网站| 精品国产乱码久久久久酒店 | 国产美女永久无遮挡| 中文字幕在线视频网| 精品国产一区二区三区2021| 亚洲午夜av| 91在线观看污| 亚洲爱爱爱爱爱| 91久久久一线二线三线品牌| 无码精品国产一区二区三区免费| 久久经典视频| 美日韩中文字幕| 久久一夜天堂av一区二区三区| 欧美一区二区三区免费在线看 | 成人自拍视频网站| 男女小视频在线观看| 亚洲电影有码| 久久精品二区亚洲w码| 欧美唯美清纯偷拍| 999国产视频| 色噜噜狠狠狠综合欧洲色8|