缘由是在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);
回调函数的优势: