緣由是在Mac系統(10.9)裏默認不容許GNU gdb訪問其餘進程,須要對gdb進行簽名。json
具體作法可參考 https://www.jianshu.com/p/303bc5f53a52 給gdb受權或者添加信任證書數據結構
"code-runner.runInTerminal": true函數
//根據代碼可知此時 p==NULL tDataNode *p = FindCmd(head, cmd); if( p == NULL) {
printf("This is a wrong cmd!\n "); continue; }
//FindCmd函數中又調用的SearchLinkTableNode函數
在while循環處和SearchConditin函數處加斷點進行調試ui
並監視數據變化狀況spa
能夠看到輸入的指令爲「quit」,第一次循環的節點指令爲「help」,點擊繼續(F8)插件
再繼續則退出了while循環,證明了上文的分析。循環斷定條件出錯致使處於隊尾的指令不被識別。指針
//更改循環條件則能夠避免這種狀況 while(pNode != NULL)
能夠看到成功識別了quit指令調試
當某一函數A想要調用一箇中間函數時,這個中間函數容許函數A來定義部分函數行爲,從代碼的角度來講就是這個中間函數要求函數A(以函數指針的形式)先傳入一個函數B,這個B就叫回調函數。中間函數須要這個函數B來構成完整的操做邏輯。code
類比就像我找4S店說要買車,我先把個人要求(回調函數)給4S店(中間函數),4S店根據個人要求返還我一份符合條件的車型。blog
在此項目中
//在項目中就使用了回調函數 tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode)) //使用時傳入的是menu.c中的SearchCondition函數 (tDataNode*)SearchLinkTableNode(head,SearchCondition);
回調函數的優勢: