<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                今天在Linux下調試C程序時,出現段錯誤,習慣性的ls下當前目錄,發現沒有生成core文件。驚訝了一下,怎么回事?以前都會產生的啊,難不成是程序的問題?后來同事提醒是不是系統沒有打開生成core dump的設置。 還真是系統設置問題,我的ubuntu14.04是新裝的,之前沒有進行過core dump的相關配置,別急!我們來看看怎么對linux系統設置當程序出現段錯誤時產生core文件: 1、先用#ulimit -a可以查看系統core文件的大小限制(第一行),core文件大小設置為0, 即沒有打開core dump設置; root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 46621 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 46621 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 2、接下來使用#ulimit -c [kbytes]可以設置系統允許生成的core文件大小; ulimit -c 0 不產生core文件 ulimit -c 100 設置core文件最大為100k ulimit -c unlimited 不限制core文件大小 執行#ulimit -c unlimited,然后#ulimit -a查看結果如下(第一行): root@XZX:~/cnnic/project/dnsx/dnsX# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 46621 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 46621 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 此時,core dump設置打開了,再執行程序出現段錯誤時,在當前工作目錄下產生了core文件,然后我們就可以用gdb調試core文件了。 例如: gdb ./test core.2065 注:Linux下的C程序常常會因為內存訪問錯誤等原因造成segment fault(段錯誤),此時如果系統core dump功能是打開的,那么將會有內存映像轉儲到硬盤上來,之后可以用gdb對core文件進行分析,還原系統發生段錯誤時刻的堆棧情況。這對于我們發現程序bug很有幫助。 很多系統默認的core文件大小都是0,我們可以通過在shell的啟動腳本/etc/bashrc或者~/.bashrc等地方來加入 ulimit -c 命令來指定core文件大小,從而確保core文件能夠生成。 除此之外,還可以在/proc/sys/kernel/core_pattern里設置core文件的文件名模板,詳情請看core的官方man手冊。 需要說明的是:上述方法只是在當前shell中生效,重啟之后,就不再有效了。永久生效的辦法是如下: 永久生效辦法: #vi /etc/profile 然后,在profile中添加: ulimit -c 1073741824 (但是,若將產生的轉儲文件大小大于該數字時,將不會產生轉儲文件) 或者 ulimit -c unlimited 這樣重啟機器后生效了。 或者, 使用source命令使之馬上生效。 source /etc/profile 三、指定內核轉儲的文件名和目錄 修改完內核轉儲設置后,當程序core dump后發現確實在本地目錄產生了core文件,但是如果程序多次core dump時,core文件會被覆蓋,原因是每次core dump后生成的文件名默認都叫core,接下來就分享下如果想在每次core dum時產生的core文件都帶上進程號怎么操作,或者你想把內核轉儲文件保存到其他目錄怎么辦? 1、core dump文件名自動加上進程ID echo 1 > /proc/sys/kernel/core_uses_pid 最后生成的core dump文件名會加上進程ID. 2、另外可以通過修改kernel的參數,指定內核轉儲所生成的core文件的路徑和文件名。 可以通過在/etc/sysctl.conf文件中,對sysctl變量kernel.core_pattern的設置。 #vim /etc/sysctl.conf 然后,在sysctl.conf文件中添加下面兩句話: ``` kernel.core_pattern = /var/core/core_%e_%p kernel.core_uses_pid = 0 ``` 保存后退出。 注:如果/proc/sys/kernel/core_uses_pid 這個文件的內容被配置成1,即使core_pattern中沒有設置%p,最后生成的core dump文件名仍會加上進程ID。 這里%e, %p分別表示: %c 轉儲文件的大小上限 %e 所dump的文件名 %g 所dump的進程的實際組ID %h 主機名 %p 所dump的進程PID %s 導致本次coredump的信號 %t 轉儲時刻(由1970年1月1日起計的秒數) %u 所dump進程的實際用戶ID 可以使用以下命令,使修改結果馬上生效。 sysctl –p /etc/sysctl.conf 請在/var目錄下先建立core文件夾,然后執行a.out程序,就會在/var/core/下產生以指定格式命名的內核轉儲文件。查看轉儲文件的情況: ls /var/core ``` core_a.out_2456 ``` 更詳細的內容或手動強制某個進程產生core dump的方法見鏈接:http://blog.csdn.net/wj_j2ee/article/details/7161586 幫助鏈接:http://www.cppblog.com/API/archive/2012/10/22/193644.html ———————————————— 版權聲明:本文為CSDN博主「不會游泳的魚star」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/star_xiong/article/details/43529637
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看