天天看點

Linux下C/C++語言調試方法

1. dmesg

dmesg主要用于在程序崩潰掉的時候,顯示核心的相關資訊。

dmesg | tail -f   #列印目前資訊
dmesg -c #列印後,清除緩沖區内容
dmesg -s 1024 #定義緩沖區大小
           
[email protected]:~$ dmesg | tail -f
[72728.302787] perf: interrupt took too long (3195 > 3167), lowering kernel.perf_event_max_sample_rate to 62500
[78343.525539] kauditd_printk_skb: 56 callbacks suppressed
[78343.857433] audit: type=1400 audit(1563488119.848:70): apparmor="STATUS" 
           

2. ldd

ldd指令主要檢視程序依賴的共享連結庫。

[email protected]:~$ ldd /usr/lib/ssl/bin/openssl 
	linux-vdso.so.1 (0x00007ffe7edfd000)
	libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007ff244a0a000)
	libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ff2445c7000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff2441d6000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff243fd2000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff244c72000)
           

3. core檔案

當程式偶發性崩潰的時候,我們可以借助系統的core dump來檢視崩潰時候的錯誤資訊。排查段錯誤等異常資訊非常給力。

開啟core dump,首選需要設定ulimit

[email protected]:~$ ulimit -c unlimited
           

一般情況下,core dump後的檔案會在目前目錄,也有可能是統一的core dump目錄。統一目錄可以檢視:

cat /proc/sys/kernel/core_pattern
           

4. pstack

pstack一般檢視線程。對于多線程c程式,容易引起死鎖,使用pstack來檢查是否有死鎖情況。

[email protected]:~$ ps aux | grep gnatsd
root  1811  0.0  0.0 1743380 3744 pts/0    Sl   7月18   1:39 gnatsd
root 28640  0.0  0.0  21552  1024 pts/1    S+   15:36   0:00 grep --color=auto gnatsd
[email protected]:~$ pstack 1811
           

4. gdb

參考gdb調試。