linux下程式的編譯以及執行,看崩潰檔案,以及用gdb除錯程式
1.gcc安裝完虛擬機器預設攜帶,需要安裝g++ yum gcc_g++
編寫乙個cpp檔案,內容如下:
1 #include
2 using namespace std;
3 int main()
4 5 {
6 int *p=null;
7 int a=3;
8 p=&a;
9 delete p;
10 delete p;
11 cout<<"hello world in the linux zhanghuaichao"<2.編譯檔案
g++ hello.cpp -g -o 123 //為了生成除錯檔案資訊使用-g
3.設定生成core檔案
使用 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) 7179
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) 7179
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
我們發現這個core size=0就是不生成core檔案,需要用下面的指令設定生成的core檔案大小
ulimit -c unlimited //設定成最大
[root@localhost c++program]# 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) 7179
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) 7179
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
4.執行可執行檔案,產生崩潰檔案
./123
崩潰後形成了core檔案 core.5520
5.用gdb來除錯core檔案
gdb ./123 core.5520(類似於用windbg開啟dump檔案)
用 bt指令檢視堆疊資訊
(gdb) bt
#0 0x00007f5266d291d7 in raise () from /lib64/libc.so.6
#1 0x00007f5266d2a8c8 in abort () from /lib64/libc.so.6
#2 0x00007f5266d68f07 in __libc_message () from /lib64/libc.so.6
#3 0x00007f5266d70503 in _int_free () from /lib64/libc.so.6
#4 0x00000000004008e8 in main () at helloworld.cpp:9
看到程式崩潰到第9行
檢視第九行的內容
list 9
(gdb) list 9
4
5 {
6 int *p=null;
7 int a=3;
8 p=&a;
9 delete p;
10 delete p;
11 cout<<"hello world in the linux zhanghuaichao"《我是故意去delete乙個棧上的記憶體,導致崩潰
6.直接像vs f5一樣除錯程式
然後要先設定斷點
(gdb) b 3
breakpoint 1 at 0x4008c5: file helloworld.cpp, line 3.
然後開始除錯
(gdb) r
starting program: /home/zhang/c++program/123
breakpoint 1, main () at helloworld.cpp:6
6 int *p=null;
missing separate debuginfos, use: debuginfo-install glibc-2.17-157.el7.x86_64 libgcc-4.8.5-39.el7.x86_64 libstdc++-4.8.5-39.el7.x86_64
(gdb)
程式停止在了第六行
b) next
7 int a=3;
(gdb) n
8 p=&a;
(gdb)
如果這個時候想檢視變數的值 採用print
(gdb) print a
$1 = 3
(gdb)
如果不進行除錯,想全速執行 c
continue
linux下除錯程式
摘要 在linux下,我們也應該掌握常見的程式除錯指令,這樣才能方便我們在linux下進行工作。在windows下雖然除錯程式比較方便,但是linux有比它更加吸引人的地方在於它可以很輕鬆的就進入乙個程式的內部。這對於我們後期的 分析有很大的好處,所以,今天我就把這幾天學到的關於除錯程式的命令列總計...
linux下除錯python程式
之前除錯python程式都是用print引數,感覺有點弱爆啊,最近發現python也有類似c語言gdb的工具pdb,記錄下pdb的使用方法和心得。先找了段簡單的測試程式 usr bin python from ftplib import ftpimport sysimport socket impo...
Linux下GDB除錯程式
gdb是gnu開源組織發布的乙個強大的unix下的程式除錯工具。或許,各位比較喜歡那種圖形介面方式的,像vc bcb等ide的除錯,但如果你是在unix平台下做軟體,你會發現gdb這個除錯工具有比vc bcb的圖形化偵錯程式更強大的功能。所謂 寸有所長,尺有所短 就是這個道理。一般來說,gdb主要幫...