先編寫應用程式,使之包含三個進程,分別輸出三個字母,不知道從何下手,先研究一下上課老師講的例子,代碼如下 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 5 void loop(){ 6 while(1); 7 ...
先編寫應用程式,使之包含三個進程,分別輸出三個字母,不知道從何下手,先研究一下上課老師講的例子,代碼如下
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <pthread.h> 4 5 void loop(){ 6 while(1); 7 } 8 9 void *p1(){ 10 printf("thread-1 starting\n"); 11 loop(); 12 } 13 14 void *p2(){ 15 printf("thread-2 starting\n"); 16 loop(); 17 } 18 19 void main(){ 20 int pid1, pid2; 21 pthread_t t1,t2; 22 void *thread_result; 23 24 printf("main starting\n"); 25 26 if (!(pid1 = fork())){ 27 printf("child-1 starting\n"); 28 loop(); 29 exit(0); 30 } 31 32 if (!(pid2 = fork())){ 33 printf("child-2 starting\n"); 34 loop(); 35 exit(0); 36 } 37 38 pthread_create(&t1, NULL, p1, NULL); 39 pthread_create(&t2, NULL, p2, NULL); 40 41 pthread_join(t1, &thread_result); 42 pthread_join(t2, &thread_result); 43 44 int status; 45 waitpid(pid1, &status, 0); 46 waitpid(pid2, &status, 0); 47 printf("main exiting\n"); 48 exit(0); 49 }View Code
運行結果如下
1 / # tmp/do-fork & 2 main starting 3 child-1 starting 4 child-2 starting 5 thread-1 starting 6 thread-2 starting 7 / #
各種問題來了:
C語言中的語法也不能完全搞懂,指針的地方模糊了,複習一下,感覺*和&就像是逆運算。
pthread_t是用來聲明線程ID的。
!(pid1 = fork())是什麼意思呢,根據上下文是創建子進程,返回0,才執行if語句,但fork()如果執行成功,是返回兩個值,子進程返回0,父進程返回子進程的ID,另,賦值表達式怎麼可以取反?由於不影響意思,跳過
fork返回新創建子進程的進程ID。我們可以通過fork返回的值來判斷當前進程是子進程還是父進程。引用一位網友的話來解釋fpid的值為什麼在父子進程中不同。“其實就相當於鏈表,進程形成了鏈表,父進程的fpid(p 意味point)指向子進程的進程id,因為子進程沒有子進程,所以其fpid為0.
pthread_create是類Unix操作系統(Unix、Linux、Mac OS X等)的創建線程的函數。它的功能是創建線程(實際上就是確定調用該線程函數的入口點),線上程創建以後,就開始運行相關的線程函數。pthread_create的返回值 表示成功,返回0;表示出錯,返回-1。第一個參數為指向線程標識符的指針。第二個參數用來設置線程屬性。第三個參數是線程運行函數的起始地址。最後一個參數是運行函數的參數。 pthread_join()函數,以阻塞的方式等待thread指定的線程結束。當函數返回時,被等待線程的資源被收回。如果線程已經結束,那麼該函數會立即返回。並且thread指定的線程必須是joinable的。參數 :thread: 線程標識符,即線程ID,標識唯一線程。retval: 用戶定義的指針,用來存儲被等待線程的返回值。返回值 : 0代表成功。 失敗,返回的則是錯誤號。代碼中如果沒有pthread_join主線程會很快結束從而使整個進程結束,從而使創建的線程沒有機會開始執行就結束了。加入pthread_join後,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行。waitpid會暫時停止目前進程的執行,直到有信號來到或子進程結束。
如果執行loop,一直迴圈,怎麼跳出來?
到此,還是不知道程式流是怎樣的順序,不會模仿,再難進展了
無奈,只好請教別人,在他的幫助下,寫出了abc.c
下一步要在Ubuntu中編譯測試上述程式,怎麼編譯測試呢?不知道,運行一下吧
【
7.啟動gcc對代碼進行編譯。
gcc helloworld.c -o execFile(此步驟會生成一個execFlie的文件,可用ls查看)
8.如果有錯誤,系統會提示,按方向鍵找回gedit helloworld.c 的指令,按下回車,彈出文本框後根據系統提示對代碼進行修改,完成後記得保存,
關閉文本框。
9.運行
./execFlie則會開始運行
】
用putty使用ssh連接虛擬機時也總是出問題,連不上,試驗之後發現,似乎等一個終端提示連接失敗後的信息後,再連就可以了
執行後發現程式沒問題,我的疑惑在於像fork()這種明明沒有定義的函數,他是怎麼可以執行的,可以在windows環境下用vscode試一下老師的程式和abc.c
把擴展包重新載入一下,未解決(橫生枝節,在家裡遇到這種情況就會有畏難情緒)
在網上搜了一下,似乎有一些方法,但不想試了,現在實驗要緊
輸入gcc指令,如下
gcc後面一長串是幹嘛的,查了一下,-o:指定生成的輸出文件
其他的查不到了,只好作罷
耐心經常就是這樣被磨沒的,但也正是要剋服這一點,忍受在各種不確定的未知的環境中去抓住重點
下麵將abc放入qemu
將rootfs目錄下的文件_install.tgz解壓,此目錄在哪?【Linux系統中的根文件系統,Root FileSystem,簡稱為rootfs】但我又找到了qume的footfs似乎,這次用的是這個
解壓文件的後面的參數都是幹嘛的?【
-x或--extract或--get:從備份文件中還原文件;
-v或--verbose:顯示指令執行過程;
-z或--gzip或--ungzip:通過gzip指令處理備份文件;
-f<備份文件>或--file=<備份文件>:指定備份文件;
-C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可以使用這個選項。
】不完全理解,不過有點進步
重新打包生成qume的根文件系統,生成的根文件系統放在了映像文件rootfs.img.gz
運行qume虛擬機,在虛擬機的命令解釋器中運行和測試應用程式abc,由於迴圈執行無法退出,ctrlC不行,esc不行,回車不行,別的不知道怎麼樣做了
重新開一個終端,奇怪,為什麼看不到剛剛運行abc的進程, 把終端關了,可能就是把裡面運行的全關了吧,如下圖
由於剛剛的教訓,所有的腳本都沒有保存,更改putty的設置
一試才知道,不用改,預設的複製粘貼最快捷了。可以改一下保存的行數,在window裡面
abc沒問題,繼續下一步
啟動調試,設置所有需要的內核斷點
鑒於斷點重新設置,所以打算把上次用的0.gbd略作修改,首先,複製一份文件,命名為新名字,查【
- i 和f選項相反,在覆蓋目標文件之前將給出提示要求用戶確認。回答y時目標文件將被覆蓋,是互動式拷貝。
- r 若給出的源文件是一目錄文件,此時cp將遞歸複製該目錄下所有的子目錄和文件。此時目標文件必須為一個目錄名。
mv dir1 newdir
//dir1移動到當前目錄下,並改名字為newdir
】
只留這啟動的幾行
1 1 target remote localhost:1234 2 2 dir ~/aos/lab/busybox 3 3 add-symbol-file ~/aos/lab/busybox/busybox_unstripped 0x8048400
啟動
1 nudt@ubuntu:~/aos/lab/cur$ gdb vmlinux -x ~/aos/lab/1.gdb 2 GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1 3 Copyright (C) 2014 Free Software Foundation, Inc. 4 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 5 This is free software: you are free to change and redistribute it. 6 There is NO WARRANTY, to the extent permitted by law. Type "show copying" 7 and "show warranty" for details. 8 This GDB was configured as "x86_64-linux-gnu". 9 Type "show configuration" for configuration details. 10 For bug reporting instructions, please see: 11 <http://www.gnu.org/software/gdb/bugs/>. 12 Find the GDB manual and other documentation resources online at: 13 <http://www.gnu.org/software/gdb/documentation/>. 14 For help, type "help". 15 Type "apropos word" to search for commands related to "word"... 16 Reading symbols from vmlinux...done. 17 /home/nudt/aos/lab/1.gdb: No such file or directory. 18 (gdb)
可執行文件的執行,只需要跟蹤普通進程對此函數的調用,如何體現普通進程,查找上次做的實驗【所有內核線程的task_struct結構的成員的mm值都是0,如果該值非0,則說明是普通進程】
調度的開始和結束:函數_schedule的進入和退出,退出如何體現呢?【b 函數所在文件名:函數最後一行的行號,最後一行指的是}所在行】怎麼知道所在文件名和最後一行的行號,網上找不到,請教別人,【原來文件名在設置斷點時可以看到,這樣去對應目錄就可以找行號了】。已經運行了一個./run s,這個終端應該不好看吧,因為設置的斷點越來越多,還是要再開一個終端./run,去新開的裡面看,運行兩次是否有問題?請教大神,【到外層的虛擬機去看,不用到qume裡面看,據說qume裡面什麼都看不見,這個有待實踐】。kernel文件夾在哪?【linux內核預設存放到/boot下,而/usr/src中可查看內核的信息】但去boot下麵查看,並沒有【在引導文件夾(/boot)下,用戶會看到諸如“vmlinux”或者“vmlinuz”的文件。這兩者都是已編譯的Linux內核。以“z”結尾的是已壓縮的。“vm”代表虛擬記憶體。在SPARC處理器的系統上,用戶可以看見一個zImage文件。一小部分用戶可以發現一個bzImage文件,這也是一個已壓縮的Linux內核。無論用戶有哪個文件,這些引導文件都是不能更改的,除非用戶知道他們正在做什麼。否則系統會變成無法引導,也就是說系統啟動不了了。】
【不是這裡,而應該是qume對應的目錄】這說明,沒有理解,之前按教程進行時,都是自己做的操作
進了core.c,看到了不是代碼,而是下麵的,眼都瞎了,看起來像版本的更新日誌【可以往下翻頁】,覺得有點缺乏探索精神,明明試一下就知道,還得問別人
跳轉到指定行號【:set nu加行號,:數字行號跳轉,/xxx查找】
給函數結束加斷點的前期工作終於做完了,正式加斷點,文件目錄可以有兩種寫法,一種是模仿他上面寫的,另外一個是全的,我先寫的全的,報錯
換了一種表達,仍然一樣的錯
去查Make breakpoint pending on future shared library load? 的問題,網上的教程不敢試,因為不知道在做什麼,怕亂了。突然想到,語句寫錯了
總算成功了,一上午從abc放到qume開始,只做到現在,休息一下
下午,繼續加斷點,進程切換的開始,看來腳本語言不支持註釋
中斷處理的開始,時鐘中斷和其他中斷,smp_apic_timer_interrupt這個函數網上資料不多。
中斷和異常的結束,從兩個函數準備結束,真正結束是最後一個,但也可能是系統調用的結束。
軟中斷處理的開始和結束,函數的進入和退出,這下對退出怎麼設置比較有經驗了。
缺頁異常的開始。
設備不存在異常的開始。
系統調用異常的開始和結束,在參數regs->orig_ax中記錄了系統調用號,有時系統調用的結束位置是在restore_all,系統調用結束前,一般會執行函數prepare_exit_to_usermode。什麼是系統調用?【系統調用把應用程式的請求傳給內核,調用相應的內核函數完成所需的處理,將處理結果返回給應用程式。】do_fast_syscall_32函數沒有在kernel裡面,但在上層目錄找不到對應的entry文件夾,網上找不到。他們說可以用source insight,同時也發現了kernel和arch是同一個目錄,別說基礎薄弱了,就連粗心也成了坑。
順利找到結束位置
想查看系統調用號,直接輸入display reg->ax不行,這樣不知道行不行,先往下繼續吧
增加和刪除CFS隊列中的節點
更新當前進程的vruntime,此函數結束時時鐘已經更新,於是在結束處也加斷點
準備由核心進入用戶態
設置需要剝奪當前進程而重新調度標誌
到現場為止,斷點設置完畢
運行過程如下
5 Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64) 6 7 * Documentation: https://help.ubuntu.com/ 8 New release '16.04.6 LTS' available. 9 Run 'do-release-upgrade' to upgrade to it. 10 11 Last login: Thu Mar 19 18:03:31 2020 from 192.168.91.1 12 nudt@ubuntu:~$ cd /home/nudt/aos/lab/cur 13 nudt@ubuntu:~/aos/lab/cur$ ls 14 0.gdb fs modules.builtin tmp.bp 15 arch include modules.order tools 16 block init Module.symvers ubuntu 17 certs ipc net usr 18 COPYING Kbuild README virt 19 CREDITS Kconfig REPORTING-BUGS vmlinux 20 crypto kernel samples vmlinux-gdb.py 21 debian.master lab scripts vmlinux.o 22 Documentation lib security zfs 23 drivers MAINTAINERS sound 24 dropped.txt Makefile spl 25 firmware mm System.map 26 nudt@ubuntu:~/aos/lab/cur$ vi 0.gdb 27 nudt@ubuntu:~/aos/lab/cur$ cp 0.gdb 1.gdb 28 nudt@ubuntu:~/aos/lab/cur$ ls 29 0.gdb firmware mm System.map 30 1.gdb fs modules.builtin tmp.bp 31 arch include modules.order tools 32 block init Module.symvers ubuntu 33 certs ipc net usr 34 COPYING Kbuild README virt 35 CREDITS Kconfig REPORTING-BUGS vmlinux 36 crypto kernel samples vmlinux-gdb.py 37 debian.master lab scripts vmlinux.o 38 Documentation lib security zfs 39 drivers MAINTAINERS sound 40 dropped.txt Makefile spl 41 nudt@ubuntu:~/aos/lab/cur$ vi 1.gdb 42 nudt@ubuntu:~/aos/lab/cur$ ls 43 0.gdb firmware mm System.map 44 1.gdb fs modules.builtin tmp.bp 45 arch include modules.order tools 46 block init Module.symvers ubuntu 47 certs ipc net usr 48 COPYING Kbuild README virt 49 CREDITS Kconfig REPORTING-BUGS vmlinux 50 crypto kernel samples vmlinux-gdb.py 51 debian.master lab scripts vmlinux.o 52 Documentation lib security zfs 53 drivers MAINTAINERS sound 54 dropped.txt Makefile spl 55 nudt@ubuntu:~/aos/lab/cur$ gdb vmlinux -x ~/aos/lab/1.gdb 56 GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1 57 Copyright (C) 2014 Free Software Foundation, Inc. 58 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 59 This is free software: you are free to change and redistribute it. 60 There is NO WARRANTY, to the extent permitted by law. Type "show copying" 61 and "show warranty" for details. 62 This GDB was configured as "x86_64-linux-gnu". 63 Type "show configuration" for configuration details. 64 For bug reporting instructions, please see: 65 <http://www.gnu.org/software/gdb/bugs/>. 66 Find the GDB manual and other documentation resources online at: 67 <http://www.gnu.org/software/gdb/documentation/>. 68 For help, type "help". 69 Type "apropos word" to search for commands related to "word"... 70 Reading symbols from vmlinux...done. 71 /home/nudt/aos/lab/1.gdb: No such file or directory. 72 (gdb) b do_execve if $lx_current().mm==0 73 Breakpoint 1 at 0xc114771b: file fs/exec.c, line 1643. 74 (gdb) 75 Note: breakpoint 1 also set at pc 0xc114771b. 76 Breakpoint 2 at 0xc114771b: file fs/exec.c, line 1643. 77 (gdb) break __schedule 78 Breakpoint 3 at 0xc16d1192: file kernel/sched/core.c, line 3104. 79 (gdb) b ~/aos/lab/4.4.6-ubuntu1604/ubuntu1604/kernel/sched/core.c 3188 80 Function "~/aos/lab/4.4.6-ubuntu1604/ubuntu1604/kernel/sched/core.c 3188" not defined. 81 Make breakpoint pending on future shared library load? (y or [n]) n 82 (gdb) b kernel/sched/core.c 3188 83 Function "kernel/sched/core.c 3188" not defined. 84 Make breakpoint pending on future shared library load? (y or [n]) n 85 (gdb) b <kernel/sched/core.c>:<3188> 86 No source file named <kernel/sched/core.c>. 87 Make breakpoint pending on future shared library load? (y or [n]) n 88 (gdb) b kernel/sched/core.c:3188 89 Breakpoint 4 at 0xc16d177b: file kernel/sched/core.c, line 3188. 90 (gdb) break __switch_to//調度時如果切換進程就會調用這個函數 91 Function "__switch_to//調度時如果切換進程就會調用這個函數" not defined. 92 Make breakpoint pending on future shared library load? (y or [n]) n 93 (gdb) break __switch_to 94 Breakpoint 5 at 0xc101564a: file arch/x86/kernel/process_32.c, line 243. 95 (gdb) b smp_apic_timer_interrupt 96 Breakpoint 6 at 0xc1034cfe: file arch/x86/kernel/apic/apic.c, line 913. 97 (gdb) b do_IRQ 98 Breakpoint 7 at 0xc1017a95: file arch/x86/kernel/irq.c, line 215. 99 (gdb) b ret_from_intr 100 Breakpoint 8 at 0xc16d4fe0: file arch/x86/entry/entry_32.S, line 254. 101 (gdb) b ret_from_exception 102 Note: breakpoint 8 also set at pc 0xc16d4fe0. 103 Breakpoint 9 at 0xc16d4fe0: file arch/x86/entry/entry_32.S, line 254. 104 (gdb) b restore_all 105 Breakpoint 10 at 0xc16d5096: file arch/x86/entry/entry_32.S, line 362. 106 (gdb) b __do_softirq 107 Breakpoint 11 at 0xc104d9b5: file kernel/softirq.c, line 231. 108 (gdb) b kernel/sched/softirq.c:302 109 No source file named kernel/sched/softirq.c. 110 Make breakpoint pending on future shared library load? (y or [n]) n 111 (gdb) b kernel/softirq.c:302 112 Breakpoint 12 at 0xc104dbf4: file kernel/softirq.c, line 302. 113 (gdb) b do_page_fault 114 Breakpoint 13 at 0xc103f260: file arch/x86/mm/fault.c, line 1295. 115 (gdb) b do_device_not_available 116 Breakpoint 14 at 0xc1016a68: file arch/x86/kernel/traps.c, line 751. 117 (gdb) b do_fast_syscall_32 118 Breakpoint 15 at 0xc100196c: file arch/x86/entry/common.c, line 408. 119 (gdb) b arch/x86/entry/common.c:486 120 Breakpoint 16 at 0xc1001aa9: file arch/x86/entry/common.c, line 486. 121 (gdb) display reg->ax 122 No symbol "reg" in current context. 123 (gdb) commands 15 124 Type commands for breakpoint(s) 15, one per line. 125 End with a line saying just "end". 126 >display reg->ax 127 >end 128 (gdb) commands 16 129 Type commands for breakpoint(s) 16, one per line. 130 End with a line saying just "end". 131 >display reg->ax 132 >end 133 (gdb) b restore_all 134 Note: breakpoint 10 also set at pc 0xc16d5096. 135 Breakpoint 17 at 0xc16d5096: file arch/x86/entry/entry_32.S, line 362. 136 (gdb) b prepare_exit_to_usermode 137 Breakpoint 18 at 0xc1001879: prepare_exit_to_usermode. (4 locations) 138 (gdb) b enqueue_task_fair 139 Breakpoint 19 at 0xc1075feb: file kernel/sched/fair.c, line 4152. 140 (gdb) b dequeue_task_fair 141 Breakpoint 20 at 0xc10748ba: file kernel/sched/fair.c, line 4200. 142 (gdb) b update_curr 143 Breakpoint 21 at 0xc1070ad9: file kernel/sched/fair.c, line 702. 144 (gdb) b kernel/sched/fair.c:734 145 Breakpoint 22 at 0xc1070c81: file kernel/sched/fair.c, line 734. 146 (gdb) b prepare_exit_to_usermode 147 Note: breakpoint 18 also set at pc 0xc1001879. 148 Note: breakpoint 18 also set at pc 0xc10018b7. 149 Note: breakpoint 18 also set at pc 0xc100194d. 150 Note: breakpoint 18 also set at pc 0xc1001a3c. 151 Breakpoint 23 at 0xc1001879: prepare_exit_to_usermode. (4 locations) 152 (gdb) b set_tsk_need_resched 153 Breakpoint 24 at 0xc1069a97: file ./arch/x86/include/asm/bitops.h, line 75. 154 (gdb)
關閉除do_execve之外的所有其他斷點【
gdb中的變數從1開始標號,不同的斷點採用變數標號同一管理,可以 用enable、disable等命令管理,同時支持斷點範圍的操作,比如有些命令接受斷點範圍作為參數。
例如:disable 5-8
】
在應用程式abc的main函數入口處設置斷點
創建軟鏈接【建立軟鏈接,只要在ln後面加上選項 –s】
查看abc的.test節的起始虛擬地址【objdump命令是用查看目標文件或者可執行的目標文件的構成的gcc工具。
--disassemble -d 從objfile中反彙編那些特定指令機器碼的section。
-l
--line-numbers
用文件名和行號標註相應的目標代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區別不是很大,在源碼級調試的時候有用,要求編譯時使用了-g之類的調試編譯選項。
--all-headers -x 顯示所可用的頭信息,包括符號表、重定位入口。-x 等價於-a -f -h -r -t 同時指定。
】
結果如下
1 abc: file format elf32-i386 2 abc 3 architecture: i386, flags 0x00000112: 4 EXEC_P, HAS_SYMS, D_PAGED 5 start address 0x08048d0a 6 7 Program Header: 8 LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 9 filesz 0x000a0457 memsz 0x000a0457 flags r-x 10 LOAD off 0x000a0f40 vaddr 0x080e9f40 paddr 0x080e9f40 align 2**12 11 filesz 0x00001040 memsz 0x000023e4 flags rw- 12 NOTE off 0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**2 13 filesz 0x00000044 memsz 0x00000044 flags r-- 14 TLS off 0x000a0f40 vaddr 0x080e9f40 paddr 0x080e9f40 align 2**2 15 filesz 0x00000010 memsz 0x00000028 flags r-- 16 STACK off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**4 17 filesz 0x00000000 memsz 0x00000000 flags rw- 18 RELRO off 0x000a0f40 vaddr 0x080e9f40 paddr 0x080e9f40 align 2**0 19 filesz 0x000000c0 memsz 0x000000c0 flags r-- 20 21 Sections: 22 Idx Name Size VMA LMA File off Algn 23 0 .note.ABI-tag 00000020 080480f4 080480f4 000000f4 2**2 24 CONTENTS, ALLOC, LOAD, READONLY, DATA 25 1 .note.gnu.build-id 00000024 08048114 08048114 00000114 2**2 26 CONTENTS, ALLOC, LOAD, READONLY, DATA 27 2 .rel.plt 00000070 08048138 08048138 00000138 2**2 28 CONTENTS, ALLOC, LOAD, READONLY, DATA 29 3 .init 00000023 080481a8 080481a8 000001a8 2**2 30 CONTENTS, ALLOC, LOAD, READONLY, CODE 31 4 .plt 000000e0 080481d0 080481d0 000001d0 2**4 32 CONTENTS, ALLOC, LOAD, READONLY, CODE 33 5 .text 000753e4 080482b0 080482b0 000002b0 2**4 34 :
遇到了問題,如下,地址無效,請教大神【16進位,前面加0x,我費了半天勁,他一句就解決了】
設置好斷點
跟蹤到main函數入口處
出了點問題,只好重啟
把腳本整理好,發現運行中出現了問題,如下,於是分別去找斷點5和16,5沒什麼特殊的,16那裡刪除了兩個顯示系統調用號的語句
如上圖,還多一個斷點,逐個比對一下,原來之前多按回車,導致多了一個斷點,再次更正。就是不知道怎麼把command14和15的命令加進去
如下圖,
在暫時關閉斷點時為什麼唯獨留了do_execve,我現在運行,這個斷點特別多,真麻煩【開機之後再設斷點,剛剛多是因為開機過程中多】
將腳本整理一下
1 target remote localhost:1234 2 dir ~/aos/lab/busybox 3 add-symbol-file ~/aos/lab/busybox/busybox_unstripped 0x8048400 4 b do_execve if $lx_current().mm==0 5 break __schedule 6 b kernel/sched/core.c:3188 7 break __switch_to 8 b smp_apic_timer_interrupt 9 b do_IRQ 10 b ret_from_intr 11 b ret_from_exception 12 b restore_all 13 b __do_softirq 14 b kernel/softirq.c:302 15 b do_page_fault 16 b do_device_not_available 17 b do_fast_syscall_32 18 b arch/x86/entry/common.c:486 19 b restore_all 20 b prepare_exit_to_usermode 21 b enqueue_task_fair 22 b dequeue_task_fair 23 b update_curr 24 b kernel/sched/fair.c:734 25 b prepare_exit_to_usermode 26 b set_tsk_need_resched 27 disable 2-23 28 dir abc 29 add-symbol-file abc/abc 0x080482b0 30 b abc.c:main
到此,斷點設置完畢
下篇開始調試