锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美午夜精品一区,久久中文在线,亚洲大胆女人http://m.shnenglu.com/hex108/鎳傚巻鍙?==> 鐭ユ湭鏉? zh-cnSun, 16 Nov 2025 09:44:30 GMTSun, 16 Nov 2025 09:44:30 GMT60[鎵懼伐浣淽綆楁硶灝忕粨http://m.shnenglu.com/hex108/archive/2011/08/24/154248.htmlhex108hex108Wed, 24 Aug 2011 13:39:00 GMThttp://m.shnenglu.com/hex108/archive/2011/08/24/154248.htmlhttp://m.shnenglu.com/hex108/comments/154248.htmlhttp://m.shnenglu.com/hex108/archive/2011/08/24/154248.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/154248.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/154248.html涓轟竴涓棶棰樺鎵劇畻娉曠殑榪囩▼錛屾湁鐐瑰儚涓涓┓涓捐繃紼嬶細鎼滅儲宸叉湁鐭ヨ瘑錛屽茍榪涜閲嶇粍鐨勮繃紼嬨傛墍浠ユ妸甯哥敤鐨勭畻娉曡浣忥紝鐒跺悗涓涓竴涓瘯鐢紝鐪嬫槸鍚﹀彲琛岋紝涓嶅け涓轟竴涓ソ鏂規硶銆?div>
濡傛灉榪欎釜鏂規硶涓嶈鍛紵涓嶅Θ鍐欏嚭鏈鐩磋鐨勮В絳旓紙鍗崇敤“铔姏娉?#8221;錛夛紝鐒跺悗浠庝腑鐪嬪嚭鍙互浼樺寲鐨勫湴鏂瑰湪鍝噷錛岃繘鑰岃繘琛屼紭鍖栥?/div>


濡備綍紜畾璇ラ棶棰樺彲浠ョ敤鍝被鏂規硶鏉ヨВ絳斿憿錛熼鍏堬紝闇瑕佸榪欎簺甯哥敤鐨勭畻娉曠殑鍩烘湰鎬濇兂闈炲父鐔熸倝銆?br />甯哥敤鐨勭畻娉曞彲浠ュ垎涓轟互涓嬪嚑綾伙細
1. Divide & conquer
   鍒嗘不綆楁硶錛氬皢闂鍒嗕負涓や釜1錛?瑙勬ā澶у皬鐨勫瓙闂錛岀劧鍚庤В鍐熾傚merge sort

2. Decrease & conquer
   鍑忔不娉?: 灝嗛棶棰樿妯′粠 n 鍙樹負 n - 1錛岀劧鍚庡湪瑙勬ān-1鐨勫熀紜涓婅В鍐蟲闂銆?濡俰nsertion sort  
   榪欎笉鏄掑綊涔堬紵

3. Transform & conquer
   鍙樻不娉?錛氬彉鎹㈢粨鏋勩傚heap sort   

4. Brute force
   铔姏綆楁硶錛屽彲浠ヨ鏄繀鏉鎶鍚э紝澶ч儴鍒嗛棶棰橀兘鍙互鐢ㄦ鏂規硶瑙e喅銆?濡俿election sort
   浣跨敤铔姏娉曠殑浼樼偣鏄畝鍗曚笉瀹規槗鍑洪敊錛岀己鐐規槸澶嶆潅搴︽湁鏃跺緢楂橈紝鎵浠ユ垜浠彲浠ュ湪絀蜂婦娉曠殑鍩虹涓婅繘琛屾敼榪涳紝榪欐牱鑳借揪鍒頒竴涓懼弻寰楃殑鏁堟灉銆?br />    Backtracking(1. 綆楁硶閲岄潰鏋佸ぇ涓閮ㄥ垎鍐呭鏄浣曟湁鏁堝湴榪涜鎼滅儲錛岃繖閲岀殑"鏈夋晥"鍙互鍒嗕負錛氶伩鍏嶄笉蹇呰鐨勮綆楋紙濡侫*瀵昏礬浠ュ強鎵鏈夌殑鍚彂寮忓壀鏋濓級錛岀紦瀛橀噸澶嶈綆楋紙濡傛墍鏈夌殑鍔?鎬佽鍒掞級銆?br />2.鏈川涓婏紝緇冧範騫朵笉浜х敓鏂拌兘鍔涖傜劧鑰岀粌涔犳渶閲嶈鐨勪竴涓綔鐢ㄥ氨鏄皢澶栨樉璁板繂杞寲涓?a title="鍐呴殣璁板繂" >鍐呴殣璁板繂銆傜敤澶х櫧璇濇潵璇村氨鏄皢騫蟲椂闇瑕佺敤鑴戝瓙鍘繪兂錛堝弬涓庯級鐨勪笢瑗胯漿鍖栦負鍐呭湪鐨勪範鎯傝濡傛垜浠竴寮濮嬪楠戣嚜琛岃濺鐨勬椂鍊欓渶瑕佷笉鏂彁閱掕嚜宸辨敞鎰忓鉤琛★紝浣嗛殢鐫涓嶆柇鐨勮仈緋伙紝榪欑鎶鑳藉氨鍐呭寲鎴愪簡鎵璋撶殑

hex108 2011-08-24 21:39 鍙戣〃璇勮
]]>
[鎵懼伐浣淽鍔ㄦ佽鍒掍笌璐績綆楁硶http://m.shnenglu.com/hex108/archive/2011/08/24/154243.htmlhex108hex108Wed, 24 Aug 2011 12:51:00 GMThttp://m.shnenglu.com/hex108/archive/2011/08/24/154243.htmlhttp://m.shnenglu.com/hex108/comments/154243.htmlhttp://m.shnenglu.com/hex108/archive/2011/08/24/154243.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/154243.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/154243.html1.       娉ㄦ剰錛氬鏋滃垝鍒嗙殑瀛愰棶棰樹箣闂村瓨鍦ㄤ緷璧栵紝閭d箞璇ラ棶棰樺氨涓嶉傚悎鐢ㄥ姩鎬佽鍒掕В鍐熾傦紙瑙丆LRS 15.3 subtlties灝忚妭錛?br />
    4) reconsturcting an optimal solution     
      鐢ㄥ姩鎬佽鍒掓湁涓棶棰樺氨鏄湪鏈鍚庡緱鍒版渶浼樿В鏃朵笉鑳界煡閬撻夋嫨鐨勮繃紼嬶紝鏈夊涓嬩袱縐嶆柟娉曞彲浠ヨВ鍐籌細
      a. 鍙互鏍規嵁鎴戜滑瀛樹笅鏉ョ殑淇℃伅鎺ㄥ鍑哄墠涓姝ョ殑閫夋嫨鏄粈涔堬紝濡傦細diff.java
      b. 璁頒笅閫夋嫨銆?br />        濡傛灉閫夋嫨杈冨皯鍙互閲囩敤鏂規硶a錛屽惁鍒欓夋嫨鏂規硶2姣旇緝濂姐傝繖鏄竴涓椂絀烘潈琛¢棶棰樸?/div>
    5錛夎繍鐢ㄥ姩鎬佽鍒掓湁鍑犱釜闇瑕佹敞鎰忕殑鍦版柟錛?br />        a.  We must ensure that when we search for the correct place to spilt the product, we have considered all possible places so that we are sure of         
            having examined the optimal one.
       b.  The subproblems are independent.
       c.  涓嶈褰㈡垚鍥板畾鎬濈淮: 涓鎯沖埌鍔ㄦ佽鍒掞紝椹笂鑱旀兂鍒癓CS錛岀劧鍚庤寰楀姩鎬佽鍒掔殑琛ㄧ粨鏋勫氨鏄竴涓簩緇存暟緇?/div>     6)鎬濊?br />        瀛愰棶棰樻湁鏈浼樿В錛岄偅涔堣闂寰楀埌鐨勪竴瀹氭槸鏈浼樿В鍚楋紵 濡傛灉涓嶆槸錛岄偅涔堜粈涔堟儏鍐典笅鏄叏灞鏈浼樿В錛屼粈涔堟儏鍐墊槸灞閮ㄦ渶浼樿В?
        浠ワ紲緙栫▼涔嬬編錛炰笂鐨勪竴涓緥瀛愪婦渚嬭鏄庡涓?:(鏈夋椂闂村啀琛ヤ笂)

2. 璐績綆楁硶  
      A greedy algorithm always makes the choice that looks best at the moment. That is , it makes a locally optimal choce in the hope that chis choce will lead to a globally optimal solution.

     璐績娉曡兘瑙e喅鐨勯棶棰橈紝鍔ㄦ佽鍒掑熀鏈兘鑳借В鍐熾傦紙CLRS 16.2 Nevertheless, beneath every greedy algorithm, ther is almost always a more cumbersome dynamic-progrmming solution錛夈?/div>
     浣嗘槸錛欶or many optimization problems, using dynamic programming to determine the best choices is overkill; Simpler, more effiiect algorithms will do. (eg: greedy algorithm)

     1錛夐傚悎鐢ㄨ椽蹇冩硶瑙e喅鐨勯棶棰?
         蹇呴』瑕佹湁Greedy-choice property : a globally optiaml solution can be arrivedat by making a locally optimal (greedy) choice.
         濡傦細Huffman緙栫爜錛屾渶灝忕敓鎴愭爲
 
      2錛夎椽蹇冩硶鐨勪竴鑸楠?nbsp;     
          a. 灝嗗師闂鍒掑垎涓哄瓙2涓瓙闂錛堥潪overlap鐨勶級錛屾鏃跺氨鑳界敤鍔ㄦ佽鍒掓眰瑙d簡
          b. 鎵懼埌涓涓垝鍒嗙偣錛岃鍏朵腑涓涓瓙闂鍙樹負絀猴紝鍒欏彧鍓╀笅涓涓瓙闂浜嗭紝榪欏氨鏄椽蹇冪畻娉?/div>  
       3錛変嬌鐢ㄨ椽蹇冩硶鏃跺繀欏諱繚璇侊細
           We must prove that a greedy choice at each step yields a golbally optimal solution, and this is where cleverness may be required.
           榪欑偣涔熸槸鏈闅劇殑銆傛墍浠ユ湁涓棶棰?span style="color: red;">“浠涔堟儏鍐典笅錛屽眬閮ㄦ渶浼樻渶緇堜細浜х敓鍏ㄥ眬鏈浼樼殑緇撴灉錛?#8221;

       4錛夐傜敤璐績綆楁硶鐨勯棶棰樻湁 greedy-choice propertty錛岄渶瑕佹壘鍒頒竴涓椽蹇冪瓥鐣ャ?br />
       5錛夊浜庢壘涓嶅埌鍏ㄥ眬鏈浼樿В鐨勯棶棰橈紙濡侼P闂錛夛紝鍙互鑰冭檻璐績綆楁硶銆?br />
3. 鍔ㄦ佽鍒掍笌鍒嗘不娉曠殑姣旇緝

      鍒嗘不娉曢傚悎浜庨偅浜涜兘琚垎瑙d負鐙珛瀛愰棶棰樼殑闂錛涘姩鎬佽鍒掓洿閫傜敤浜庡瓙闂涔嬮棿涓嶆槸鐙珛鐨勶紝鑰屾槸浼歴hare subproblems銆傚姩鎬佽鍒掔殑榪欎釜鐗圭偣寰楃泭浜庡畠鎶婂瓙闂鐨勭粨鏋滈兘淇濆瓨鍦ㄤ竴涓〃涓簡錛堝姩鎬佽鍒掔殑鑻辨枃鍚嶅瓧鏄疍ynamic Programming錛岃繖閲岀殑Programming鍙悊瑙d負a tabular method(琛ㄦ牸鏂規硶)錛夛紝榪欐牱灝辮兘灝戝幓閲嶅瀛愰棶棰樼殑璁$畻銆?鎵浠ュ姩鎬佽鍒掑彲浠ョ畻浣滄槸鍒嗘不娉曞湪overlapping 瀛愰棶棰橀噷鐨勪竴涓紭鍖栵紙榪欎釜浼樺寲鍦ㄧ▼搴忎腑鏄父瑙佺殑浼樺寲鏂規硶Memoization錛坔ttp://en.wikipedia.org/wiki/Memoization錛夛級

4. 鍔ㄦ佽鍒掍笌璐績娉曠殑姣旇緝
   1) 鐩稿悓鐐?br />      a. 闂瑕佹湁optimal substructure 
        A problem exhibits optimalsubstructure if an optimal solution to the problem contains within it optimal solutions to subproblems.       
        榪欐槸鑳界敤璐績娉曚笌鍔ㄦ佽鍒掕В絳旂殑闂鐨勫叧閿洜绱犮?br />      b. 閮介渶瑕佸垝鍒嗗瓙闂錛屼絾鏄垝鍒嗗瓙闂鐨勬柟寮忔湁浜涘尯鍒紝瑙佷笅闈㈢殑涓嶅悓鐐廣?br />  
   2錛変笉鍚岀偣
     a.  鍒掑垎瀛愰棶棰?
        濡傛灉浣犳妸鍒掑垎鐨勫瓙闂鏈変氦闆?overloapping subproblem)錛岃繖灝卞緢鏄劇劧鍦板皢浣犲紩鍏ヤ簡鍔ㄦ佽鍒掔殑鎬濈淮錛屼互"An activity-selection problem"涓句緥璇存槑錛?br />
        瀵逛簬闂 "An activity-selection problem"錛屽緢瀹規槗灝辮兘鎯沖埌鍔ㄦ佽鍒掔殑瑙f硶
int select_activity(int *a, int n, int i)
{
    if(i >=n )
        return 0;
    for(j= i + 1; j < n; j ++){
        if(a[j].start >= a[i].end)
            break;
    }
    int sum1 = select_activity(a, n, j) + 1;   //select the ith activity
    int sum2 = select_activity(a, n, i + 1);   //not select the ith activity
    
    if(sum1 > sum2)
        return sum1;
    else
        return sum2;
}
    浣嗘槸濡備綍灝嗗畠杞寲涓鴻椽蹇冪畻娉曞憿錛?br />       絳旀鏄細鐢辮繖縐嶆柟娉曟槸涓嶆槗杞寲涓鴻椽蹇冩硶鐨勩備笂闈㈣繖縐嶅垝鍒嗗瓙闂鐨勬柟寮忚〃鏄庝簡瀹冩洿閫傚悎浜庡姩鎬佽鍒掞紝灝卞儚鍦–LRS 383欏甸噷璇村埌鐨?-1鑳屽寘闂錛歍he problem formulated in this way gives rise to many over-lapping subproblems 錛?a hallmark of dynamic programming.
 
    b.  璐績娉曪細 make whaterver choice seems best a the moment and then solve the subproblem arising after the choice is made.
        鍔ㄦ佽鍒掞細make a choice at each step, but the choice usually depends on the solutions to subproblems.

    c.  璐績娉曪細top-down fashinon        
        鍔ㄦ佽鍒掞細bottom-up manner

   
 


hex108 2011-08-24 20:51 鍙戣〃璇勮
]]>[鎵懼伐浣淽鏁版嵁緇撴瀯灝忕粨http://m.shnenglu.com/hex108/archive/2011/08/24/154241.htmlhex108hex108Wed, 24 Aug 2011 12:15:00 GMThttp://m.shnenglu.com/hex108/archive/2011/08/24/154241.htmlhttp://m.shnenglu.com/hex108/comments/154241.htmlhttp://m.shnenglu.com/hex108/archive/2011/08/24/154241.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/154241.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/154241.html
1. 浣嶅浘
    浣嶅浘鐨勫▉鍔涘彲浠ュ湪錛滅紪紼嬬彔鐜戯紴鐨勫紑澶村氨浣撲細鍒般傚彟澶栧湪Find an integer not among four billion given ones涓殑榪愮敤涔熷緢綺懼僵銆?br />
2. 鍫?br />
   鍦紲緙栫▼鐝犵帒錛為噷閲嶇偣榪愮敤浜嗚緇撴瀯錛岀洿鎺ュ鑷存垜浠ュ悗緇忓父鎯沖埌騫朵嬌鐢ㄨ緇撴瀯銆?br />   涓嶅緱涓嶈錛屽畠鐪熺殑寰堟湁鐢紝濡傦細鎵綨涓暟涓渶澶э紡鏈灝忕殑k涓暟銆?br />   瀹炵幇浼樺厛綰ч槦鍒楁椂涔熸湁鐢ㄣ?/div>
3. 鏍?br />
     浜屽弶鎼滅儲鏍戯細鏄竴涓緢瀹規槗灝辮兘鎯沖埌鐨勭粨鏋勶紝鍙璁╀竴媯典簩鍙夋爲婊¤凍浠ヤ笅涓涓壒鎬у氨鍙互浜嗭細瀵逛簬浠諱竴緇撶偣N錛屽叾宸﹀瓙鏍戠粨鐐筶eft婊¤凍key(x) <= key(N)錛屽叾鍙沖瓙鏍戠粨鐐箁ight婊¤凍key(y) >= key(N)錛屽叾浼樼偣鏄搷浣滅畝鍗曪紝緙虹偣鏄彃鍏ワ紝鍒犻櫎緇撶偣鐨勫鏉傚害楂橈紝涓篛(N)
     浜屽弶鎼滅儲鏍戝鏉傚害楂樼殑鍘熷洜涓猴細鏍戠殑楂樺害涓嶇‘瀹?涓嶇ǔ瀹氾紝鏈夊彲鑳戒負n錛屾墍浠ラ棶棰樼殑鍏抽敭鏄細濡備綍鎺у埗鏍戠殑楂樺害
     寰堝浜虹伒鏈轟竴鍔?浜х敓浜嗕竴緋誨垪騫寵 浜屽弶鏍戯紝濡傦細AVL鏍戯紝Red-Black鏍戯紝Treap
     涔熶駭鐢熶簡寰堝騫寵 浜屽弶鏍戠殑鍙樼錛屽錛?a title="Weight balanced tree" >Weight balanced tree錛宬-neighbor tree絳?
     Skip List 涔熸槸騫寵 浜屽弶鏍戜箣澶栫殑鍙︿竴縐嶉夋嫨
     Suffix_tree鍚庣紑鏍戙?br />
4. hash
    hash鐨勪袱涓叧閿偣鍦ㄤ簬錛歛. hash妗跺ぇ灝忕殑璁懼畾錛堜竴鑸負涓涓礌鏁幫級 b. 鍐茬獊澶勭悊鏈哄埗錛屽鍙互鐢ㄤ竴涓摼琛ㄥ鐞唄ash鍊肩浉鍚岀殑鍏冪礌銆?br />    鎴戝緢灝戣冭檻hash錛岃寰楀鏉傚害涓嶅ソ鎶婃彙銆備互鍚庡掓槸鍙互鑰冭檻鐢ㄧ敤錛屽錛氬湪闂“鍒ゆ柇涓や釜閾捐〃鏄惁鐩鎬氦”鏈夊彲浠ヤ嬌鐢╤ash錛?#8220;鍒ゆ柇閾捐〃鏈夋病鏈夌幆”鐢╤ash涔熷緢緇欏姏銆?/div>

hex108 2011-08-24 20:15 鍙戣〃璇勮
]]>linux淇″彿鏈哄埗 錛?鐢ㄦ埛鍫嗘爤鍜屽唴鏍稿爢鏍堢殑鍙樺寲http://m.shnenglu.com/hex108/archive/2011/07/26/151886.htmlhex108hex108Tue, 26 Jul 2011 10:27:00 GMThttp://m.shnenglu.com/hex108/archive/2011/07/26/151886.htmlhttp://m.shnenglu.com/hex108/comments/151886.htmlhttp://m.shnenglu.com/hex108/archive/2011/07/26/151886.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/151886.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/151886.html姝ゆ枃鍙畝鍗曞垎鏋愬彂閫佷俊鍙風粰鐢ㄦ埛紼嬪簭鍚庯紝鐢ㄦ埛鍫嗘爤鍜屽唴鏍稿爢鏍堢殑鍙樺寲銆傛病鏈夊垎鏋愬疄鏃朵俊鍙鳳紝褰撶劧鏁翠釜榪囩▼鍩烘湰涓鑷淬傚緢澶氬弬鑰冧簡錛滄儏鏅垎鏋愶紴錛屾墍浠ユ湁浜涗唬鐮佸拰鐜板湪鐨勫唴鏍稿彲鑳戒笉鍚岋紝姣斿RESTORE_ALL錛屼絾澶т綋鐨勬満鍒舵槸綾諱技鐨勩?br />
1. 涓涓俊鍙峰皬渚嬪瓙

hex@Gentoo ~/signal $ cat sigint.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void sig_int(int signo)
{
    printf("hello\n");
}

int main()
{
    if(signal(SIGINT, sig_int) == SIG_ERR){
        printf("can't catch SIGINT\n");
        exit(-1);
    }

    for(;;)
        ;

    return 0;
}

2. 鐢ㄦ埛鍫嗘爤閲屽彂鐢熺殑鏁呬簨

2.1 緙栬瘧榪愯璇ョ▼搴?騫惰緗柇鐐瑰湪sig_int鍑芥暟寮澶?0x80482e8)錛屽茍璁劇疆SIGINT淇″彿鐨勫鐞嗘柟寮?br />hex@Gentoo ~/signal $ gdb ./sigint
(gdb) b *0x80482e8
Breakpoint 1 at 0x80482e8: file sigint.c, line 6.
(gdb) handle SIGINT noprint pass
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Signal        Stop    Print    Pass to program    Description
SIGINT        No    No    Yes        Interrupt
(gdb) r
Starting program: /home/gj/signal/sigint

2.2 鍚戣紼嬪簭鍙戦佷俊鍙? kill -INT 姝ょ▼搴忕殑pid鍙?br />hex@Gentoo ~/signal $ kill -INT 4639

2.3 璇ョ▼搴忔敹鍒頒俊鍙峰悗鍋滃湪鏂偣澶?br />Breakpoint 1, sig_int (signo=2) at sigint.c:6
6    {
(gdb) i r esp
esp            0xbfffe7ec    0xbfffe7ec
(gdb) x/40a 0xbfffe7ec
0xbfffe7ec:    0xb7fff400    0x2    0x33    0x0
0xbfffe7fc:    0x7b    0x7b    0x8048930 <__libc_csu_init>    0x80488f0 <__libc_csu_fini>
0xbfffe80c:    0xbfffed58    0xbfffed40    0x0    0x0
0xbfffe81c:    0xbfffec18    0x0    0x0    0x0
0xbfffe82c:    0x8048336 <main+58>    0x73    0x213    0xbfffed40
0xbfffe83c:    0x7b    0xbfffead0    0x0    0x0
0xbfffe84c:    0x0    0x0    0x0    0x0
0xbfffe85c:    0x0    0x0    0x0    0x0
0xbfffe86c:    0x0    0x0    0x0    0x0
0xbfffe87c:    0x0    0x0    0x0    0x0
鏍堜笂鐨勫唴瀹逛負淇″彿鏍坰igframe錛?br />鏍規嵁姝ょ粨鏋勫彲浠ョ煡閬擄細
1). 榪斿洖鍦板潃0xb7fff400錛屽畠鎸囧悜vdso閲岀殑sigreturn
(gdb) x/10i 0xb7fff400
   0xb7fff400 <__kernel_sigreturn>:    pop    %eax
   0xb7fff401 <__kernel_sigreturn+1>:    mov    $0x77,%eax
   0xb7fff406 <__kernel_sigreturn+6>:    int    $0x80
榪欎釜鍦板潃鏍規嵁鍐呮牳鐨勪笉鍚岃屼笉鍚岋紝鎴戠殑鍐呮牳鐗堟湰鏄?.6.38銆?br />2). 淇″彿澶勭悊紼嬪簭瀹屾垚鍚庯紝浼氬洖鍒?eip = 0x8048336 鐨勫湴鍧緇х畫鎵ц銆?br />

2.4 鎵ц瀹宻ig_int鍑芥暟鍚庯紝榪涘叆浜哶_kernel_sigreturn錛屾帴鐫鍥炲埌浜嗕唬鐮?x8048336澶勶紝涓鍒囨仮澶嶄簡姝e父銆?br />(gdb) x/5i $pc
=> 0x8048336 <main+58>:    jmp    0x8048336 <main+58>
(gdb) i r esp
esp            0xbfffed40    0xbfffed40

鍦ㄧ敤鎴峰眰鎴戜滑鑳界湅鍒扮殑鍙湁涓婇潰榪欎箞澶氫俊鎭簡錛屽彲鑳芥湁涓涓湴鏂逛笉鑳界悊瑙o細鍦ㄤ笂闈㈣繃紼媍涓?浠?xbfffe7ec璧烽偅涓鍧楁爤涓婄殑鍐呭浠庡摢鏉ョ殑錛燂紙姝e父鎯呭喌涓嬪爢鏍坋sp搴旇涓鐩存寚鍚戝湪榪囩▼d涓樉紺虹殑esp鍊?xbfffed40錛?br />
鐜板湪鏉ョ湅鐪嬪湪涓婇潰榪欎簺鐜拌薄涔嬩笅錛屽唴鏍哥殑鍫嗘爤鍙戠敓浜嗘庢牱鐨勫彉鍖栥?br />
3. 鍐呮牳鍫嗘爤閲屽彂鐢熺殑鏁呬簨
3.1 鍙戜俊鍙鋒椂
鍦?2.2 閲屽綋鎵цkill -INT 4639鍚庯紝pid涓?639鐨勭▼搴忥紙涔熷氨鏄垜浠繍琛岀殑 ./sigint錛変細鏀跺埌涓涓俊鍙鳳紝浣嗘槸淇″彿瀹為檯閮芥槸鍦ㄥ唴鏍擱噷瀹炵幇鐨勩傛瘡涓繘紼嬶紙榪欓噷鍙榪涚▼鐨勬儏鍐碉紝綰跨▼綾諱技錛岀嚎紼嬫湁涓涓猼id錛夐兘鏈変竴涓猵id錛屼笌姝id瀵瑰簲鏈変竴涓粨鏋?task_struct 錛屽湪task_struct閲屾湁涓涓彉閲?struct sigpending pending錛屽綋璇ヨ繘紼嬫敹鍒頒俊鍙鋒椂錛屽茍涓嶄細绔嬪嵆浣滃嚭鍙嶅簲錛屽彧鏄鍐呮牳鎶婅繖涓俊鍙瘋鍦ㄤ簡姝ゅ彉閲忛噷錛堝畠閲岄潰鏄竴涓摼琛ㄧ粨鏋勶級銆傚綋鐒訛紝姝ゆ椂涓庡唴鏍稿爢鏍堣繕娌℃湁澶氬ぇ鍏崇郴銆?br />
3.2 媯嫻嬩俊鍙?br />  濡傛灉鍙褰曚簡淇″彿錛屼絾娌℃湁鐩稿簲鍙嶅簲錛岄偅鏈変粈涔堢敤鍟娿備竴涓繘紼嬪湪浠涔?鎯呭喌涓嬩細媯嫻嬩俊鍙風殑瀛樺湪鍛紵鍦?lt;鎯呮櫙鍒嗘瀽>閲岃鍒頒簡錛?#8220;鍦ㄤ腑鏂満鍒朵腑錛屽鐞嗗櫒鐨勭‖浠跺湪姣忔潯鎸囦護緇撴潫鏃墮兘瑕佹嫻嬫槸鍚︽湁涓柇璇鋒眰鐨勫瓨鍦ㄣ備俊鍙鋒満鍒舵槸綰蔣浠剁殑錛屽綋鐒朵笉鑳戒緷闈犵‖浠舵潵媯嫻嬩俊鍙風殑鍒版潵銆傚悓鏃訛紝瑕佸湪姣忔潯鎸囦護緇撴潫鏃墮兘鏉ユ嫻嬫樉鐒舵槸涓嶇幇瀹炵殑錛岀敋鑷蟲槸涓嶅彲鑳界殑銆傛墍浠ュ淇″彿鐨勬嫻嬫満鍒舵槸錛氭瘡褰撲粠緋葷粺璋冪敤錛屼腑鏂鐞嗘垨寮傚父澶勭悊榪斿洖鍒扮敤鎴風┖闂寸殑鍓嶅錛涜繕鏈夊氨鏄綋榪涚▼琚粠鐫$湢涓敜閱掞紙蹇呭畾鏄湪緋葷粺璋冪敤涓級鐨勬椂鍊欙紝姝ゆ椂鑻ュ彂鐜版湁淇″彿鍦ㄧ瓑寰呭氨瑕佹彁鍓嶄粠緋葷粺璋冪敤榪斿洖銆傛昏岃█涔嬶紝涓嶇鏄甯歌繑鍥炶繕鏄彁鍓嶈繑鍥烇紝鍦ㄨ繑鍥炲埌鐢ㄦ埛絀洪棿鐨勫墠澶曟繪槸瑕佹嫻嬩俊鍙風殑瀛樺湪騫朵綔鍑哄弽搴斻?#8221;

  鍥犳錛屽鏀跺埌鐨勪俊鍙峰仛鍑哄弽搴旂殑鏃墮棿鏄?浠庡唴鏍歌繑鍥炵敤鎴風┖闂寸殑鍓嶅錛岄偅涔堟湁閭d簺鎯呭喌浼氳紼嬪簭榪涘叆鍐呮牳鍛紵絳旀鏄腑鏂紝寮傚父鍜岀郴緇熻皟鐢ㄣ傜畝鍗曚簡瑙d竴涓嬪畠浠彂鐢熸椂鍐呮牳鍫嗘爤鐨勫彉鍖栥?br />
  //-----涓柇錛屽紓甯革紝緋葷粺璋冪敤 : 寮濮?
   1)鍦ㄧ敤鎴風┖闂村彂鐢熶腑鏂椂錛孋PU浼氳嚜鍔ㄥ湪鍐呮牳絀洪棿淇濆瓨鐢ㄦ埛鍫嗘爤鐨凷S錛?鐢ㄦ埛鍫嗘爤鐨凟SP錛?EFLAGS, 鐢ㄦ埛絀洪棿鐨凜S, EIP, 涓柇鍙?- 256
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 涓柇鍙?錛?256
   榪涘叆鍐呮牳鍚庯紝浼氳繘琛屼竴涓猄AVE_ALL錛岃繖鏍峰唴鏍告爤涓婄殑鍐呭涓猴細
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 涓柇鍙?錛?256 | ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX

   濂戒簡錛屼竴鍒囬兘澶勭悊瀹屾椂錛屽唴鏍竕mp鍒癛ESTORE_ALL錛堝畠鏄竴涓畯錛屼緥錛氬湪x86_32浣撶郴緇撴瀯涓嬶紝/usr/src/kernel/arch/286/kernel/entry_32.S鏂囦歡閲屽寘鍚瀹忕殑瀹氫箟錛?br />
   RESTORE鍋氱殑宸ヤ綔錛屼粠瀹冪殑浠g爜閲屽氨鍙互鐪嬪嚭鏉ヤ簡錛?nbsp;  
   棣栧厛鎶婃爤涓婄殑 ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX pop鍒板搴旂殑瀵勫瓨鍣ㄩ噷
   鐒跺悗灝唀sp 錛?4 鎶?“涓柇鍙?錛?256” pop鎺?
   姝ゆ椂鍐呮牳鏍堜笂鐨勫唴瀹逛負錛?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP
   鏈鍚庢墽琛宨ret鎸囦護錛屾鏃禖PU浼氫粠鍐呮牳鏍堜笂鍙栧嚭SS, ESP, ELFGAS, CS, EIP錛岀劧鍚庢帴鐫榪愯銆?br />
   2) 鍦ㄧ敤鎴風┖闂村彂鐢熷紓甯告椂錛孋PU鑷姩淇濆瓨鍦ㄥ唴鏍告爤鐨勫唴瀹逛負錛?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 鍑洪敊浠g爜 error_code
   錛堟敞錛欳PU鍙槸鍦ㄨ繘鍏ュ紓甯告椂鎵嶇煡閬撴槸鍚﹀簲璇ユ妸鍑洪敊浠g爜鍘嬪叆鍫嗘爤錛堜負浠涔?錛夛紝鑰屼粠寮傚父澶勭悊閫氳繃iret鎸囦護榪斿洖鏃跺凡緇忔椂榪囧榪侊紝CPU宸茬粡鏃犱粠鐭ュ綋鍒濆彂鐢熷紓甯哥殑鍘熷洜錛屽洜姝や笉浼氳嚜鍔ㄨ煩榪囪繖涓欏癸紝鑰岃闈犵浉搴旂殑寮傚父澶勭▼搴忓鍫嗘爤鍔犱互璋冩暣錛屼嬌寰楀湪CPU寮濮嬫墽琛宨ret鎸囦護鏃跺爢鏍堥《閮ㄦ槸榪斿洖鍦板潃錛?br />
   榪涘叆鍐呮牳鍚庯紝娌℃湁榪涜SAVE_ALL錛岃屾槸榪涘叆鐩稿簲鐨勫紓甯稿鐞嗗嚱鏁幫紙榪欎釜鍑芥暟鏄寘瑁呭悗鐨勶紝鐪熸鐨勫鐞嗗嚱鏁板湪鍚庨潰錛夛紙鍦ㄦ鍑芥暟閲屼細鎶婄湡姝g殑澶勭悊鍑芥暟鐨勫湴鍧push鍒版爤涓婏級錛岀劧鍚巎mp鍒板悇縐嶅紓甯稿鐞嗘墍鍏辯敤鐨勭▼搴忓叆鍙rror_code錛屽畠浼氬儚SAVE_ALL閭f牱淇濆瓨鐩稿簲鐨勫瘎瀛樺櫒錛堟病鏈変繚瀛楨S錛夛紝姝ゆ椂鍐呮牳絀洪棿涓婄殑鍐呭涓猴細
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | 鍑洪敊浠g爜 error_code | 鐩稿簲寮傚父澶勭悊鍑芥暟鍏ュ彛 | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX
   錛堟敞錛氬鏋滄病鏈夊嚭閿欎唬鐮侊紝鍒欐鍊間負0錛?br />
   鏈鍚庣粨鏉熸椂涓庝腑鏂被浼鹼紙RESTORE_ALL錛夈?br />
   3) 鍙戠敓緋葷粺璋冪敤鏃訛紝CPU鑷姩淇濆瓨鍦ㄥ唴鏍告爤鐨勫唴瀹逛負:
   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP
   涓轟簡涓庝腑鏂拰寮傚父鐨勬爤涓鑷達紝鍦ㄨ繘鍏ョ郴緇熻皟鐢ㄥ叆鍙o紙ENTRY(system_call)錛夊悗浼氶鍏坧ush %eax錛岀劧鍚庤繘琛孲AVE_ALL錛屾鏃跺唴鏍告爤涓婄殑鍐呭涓?br />   | 鐢ㄦ埛鍫嗘爤鐨凷S | 鐢ㄦ埛鍫嗘爤鐨凟SP | EFLAGS | 鐢ㄦ埛絀洪棿鐨凜S | EIP | EAX | ES | DS | EAX | EBP | EDI | ESI | EDX | ECX | EBX
 
   鏈鍚庣粨鏉熸椂涓庝腑鏂被浼鹼紙RESTORE_ALL錛夈?br />   //-----涓柇錛屽紓甯革紝緋葷粺璋冪敤 : 緇撴潫

   涓柇錛屽紓甯革紝緋葷粺璋冪敤榪欓儴鍒嗘湁涓鐐歸仐婕忕殑鍦版柟錛氭嫻嬩俊鍙風殑鏃舵満灝辨槸绱ф尐鐫RESTORE_ALL涔嬪墠鍙戠敓鐨勩?br />
3.3 瀵規嫻嬪埌鐨勪俊鍙峰仛鍑哄弽搴?br />  濡傛灉媯嫻嬪埌鏈夎澶勭悊鐨勪俊鍙鋒椂錛屽氨瑕佸紑濮嬪仛涓浜涘噯澶囧伐浣滀簡錛屾鏃跺唴鏍擱噷鐨勫唴瀹逛負錛堣繘鍏ュ唴鏍哥幇鍦烘椂鐨勫唴瀹癸級
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 鐢ㄦ埛鍫嗘爤鐨凟SP1 | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | EIP1 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
  錛堟敞錛氾紵鐨勫兼湁涓変釜閫夋嫨錛氫腑鏂彿 錛?256錛忓嚭閿欎唬鐮?error_code錛忓嚭閿欎唬鐮?error_code錛?
  鍋囪灝嗚澶勭悊鐨勪俊鍙峰搴旂殑淇″彿澶勭悊紼嬪簭鏄敤鎴瘋嚜宸辮緗殑錛屽嵆鏈枃涓璖IGINT瀵瑰簲鐨勪俊鍙峰鐞嗙▼搴弒ig_int銆?br />  鐜板湪瑕佸仛鐨勪簨鎯呮槸璁ヽpu鍘繪墽琛屼俊鍙峰鐞嗙▼搴弒ig_int錛屼絾鏄墽琛屽墠闇瑕佸仛濂藉噯澶囧伐浣滐細
  3.3.1  setup_frame
  鍦ㄧ敤鎴風┖闂磋緗ソ淇″彿鏍?struct sigframe)(鍋囪璁劇疆濂芥爤鍚巈sp鐨勫間負sigframe_esp錛屽湪鏈枃涓叾鍊間負0xbfffe7ec)錛屽嵆鍦?.3閲岀湅鍒扮殑鏍堝唴瀹廣?br />  娉細struct sigframe閲岃嚦灝戝寘鍚互涓嬪唴瀹癸細
  鐢ㄦ埛鍫嗘爤鐨凷S1錛?鐢ㄦ埛鍫嗘爤鐨凟SP1錛?EFLAGS1錛?鐢ㄦ埛絀洪棿鐨凜S1錛?EIP1錛?ES1錛?DS1錛?EAX1錛?EBP1錛?EDI1錛?ESI1錛?EDX1錛?ECX1錛?EBX1

  3.3.2 璁劇疆鍗沖皢榪愯鐨別ip鐨勫間負淇″彿澶勭悊鍑芥暟sig_int鐨勫湴鍧錛堜負0x80482e8錛夛紝騫惰緗敤鎴稥SP鐨勫間負sigframe_esp(涓?xbfffe7ec)錛岃繖鏄氳繃淇敼鍐呮牳鏍堥噷鐨凟IP鍜孍SP鐨勫煎疄鐜扮殑錛屽洜涓哄湪浠庣郴緇熻皟鐢ㄩ噷iret鏃訛紝浼氫粠鍐呮牳鏍堥噷鍙朎IP錛孍SP銆?br />  榪欐椂鍐呮牳鏍堢殑鍐呮牳涓?
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 0xbfffe7ec | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | 0x80482e8 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
 
  鏈鍚庯紝榪涜RESTORE_ALL錛屽唴鏍告爤涓婄殑鍐呭涓猴細
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 0xbfffe7ec | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | 0x80482e8
 
  RESTORE_ALL閲屾墽琛屽畬iret鍚庯紝瀵勫瓨鍣ㄥ唴瀹逛負錛?EIP涓?x80482e8(鍗硈ig_int),esp涓?xbfffe7ec 銆?浜庢槸鐢ㄦ埛絀洪棿鍒頒簡姝ラ 2.3

3.4 淇″彿澶勭悊紼嬪簭瀹屾垚浠ュ悗
  2.3 -> 2.4錛岃繘鍏ヤ簡sig_return緋葷粺璋冪敤錛屽湪sig_return閲岋紝鍐呮牳鏍堢殑鍐呭涓猴紙姣忎釜鍚嶅瓧鍚庨潰鍔犱竴涓?浠ヤ究涓庡墠闈㈢殑1鍖哄垎錛?br />  | 鐢ㄦ埛鍫嗘爤鐨凷S2 | 鐢ㄦ埛鍫嗘爤鐨凟SP2 | EFLAGS2 | 鐢ㄦ埛絀洪棿鐨凜S2 | EIP2 | ? | ES2 | DS2 | EAX2 | EBP2 | EDI2 | ESI2 | EDX2 | ECX2 | EBX2
  sig_return瑕佸仛鐨勪富瑕佸伐浣滃氨鏄牴鎹敤鎴鋒爤閲宻igframe鐨勫間慨鏀瑰唴鏍告爤閲岀殑鍐呭錛屼嬌鍐呮牳鏍堝彉涓?
  | 鐢ㄦ埛鍫嗘爤鐨凷S1 | 鐢ㄦ埛鍫嗘爤鐨凟SP1 | EFLAGS1 | 鐢ㄦ埛絀洪棿鐨凜S1 | EIP1 | ? | ES1 | DS1 | EAX1 | EBP1 | EDI1 | ESI1 | EDX1 | ECX1 | EBX1
                                                  
  鑷蟲鍐呮牳鏍堥噷鐨勫唴瀹瑰拰榪涜淇″彿澶勭悊鍓嶄竴鏍蜂簡銆傜粡榪嘡ESTORE_ALL鍚庯紝鐢ㄦ埛鍫嗘爤閲岀殑鍐呭涔熷拰浠ュ墠涓鏍鳳紙涓昏鎸嘐SP鐨勫間竴鏍鳳級銆?

  "kill -INT 4639" 鍙槸涓孌靛皬鎻掓洸銆傜▼搴忎粠鍘熷寮濮嬭繍琛屻?/div>

hex108 2011-07-26 18:27 鍙戣〃璇勮
]]>
璇?lt;緙栫▼鐝犵帒>錛屼笉瑕佸繕浜嗚繕鏈夎繖鏈粡鍏?/title><link>http://m.shnenglu.com/hex108/archive/2011/07/07/150403.html</link><dc:creator>hex108</dc:creator><author>hex108</author><pubDate>Thu, 07 Jul 2011 12:47:00 GMT</pubDate><guid>http://m.shnenglu.com/hex108/archive/2011/07/07/150403.html</guid><wfw:comment>http://m.shnenglu.com/hex108/comments/150403.html</wfw:comment><comments>http://m.shnenglu.com/hex108/archive/2011/07/07/150403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/hex108/comments/commentRss/150403.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/hex108/services/trackbacks/150403.html</trackback:ping><description><![CDATA[<div>     璇葷殑榪囩▼鐪熸槸涓縐嶄韓鍙椼傜湅鍒板ソ鐨勪唬鐮侊紝濂界殑鎬濇兂錛屾諱細蹇嶄笉浣忛粯璁板嚑閬嶃?br /><br />     鐪嬪埌瑙夊緱鏈夌偣鎰忓懗鐨勫湴鏂規渶濂藉鎯蟲兂鏉ラ緳鍘昏剦錛屾兂鎯充負浠涔堬紝鍥犱負绱ф帴鐫鐨勪細鏄護浜烘儕鍠滅殑瑙h銆?澶氬啓鍐欎功涓婄殑浠g爜錛屾劅瑙変笉閿欙紙鍐欏畬浠ュ悗鎰熻蹇樹簡寰堜箙鐨勭畻娉曞張閲嶆柊鍥炴潵浜嗭級銆?姣忕珷鐨?#8220;鍘熺悊”閮ㄥ垎鏄珮搴︽х殑姒傛嫭錛?涔犻"鏄緢濂界殑錛屼績浣夸綘鍘繪濊冿紝鍋氫範棰樻槸寰堟湁蹇呰鐨勶紝涓嶆兂“嫻垂”鏃墮棿鍘?#8220;鍋氫範棰?#8221;浜嗙殑緇撴灉鍙兘鏄互鍚庝細鐢ㄦ洿澶氱殑鏃墮棿鎵嶈兘鎯蟲竻榪欎簺闂錛岃繕鏈変笉瑕佸彧鎯崇潃鐪嬬瓟妗堬紝浣犱細寰堝け鏈涳紝鍥犱負鏈変簺棰樼洰鏄病鏈夌瓟妗堢殑 :)  ps錛氭湁寰堝闈㈣瘯棰樻潵鑷叾涓殑涔犻<br /><br />     瀵逛竴浜涚畻娉曟湁浜嗘洿濂界殑鐞嗚В錛屼篃璁告槸鐪嬬浜岄亶鐨勫師鍥狅紝涔熻鏄粠涓嶅悓鐨勮搴︾湅浼氭湁涓嶅悓鐨勬晥鏋滐紙<span>鎵浠?/span><span style="color: red;">濂戒功瑕佸璇伙紝姣忛噸璇諱竴嬈′細鏈夋柊鐨勬敹鑾?/span>錛夈傛瘮濡傦細鍦ㄥ姩鎬佽鍒掔畻娉曢噷錛岀▼搴忓彲浠ョ敤閫掑綊綆楁硶鍜岀敤琛ㄦ牸鍖栨柟娉曞疄鐜般傞掑綊綆楁硶鐨勭己鐐規槸錛氭湁閮ㄥ垎鍊間細琚噸綆楋紝瑙e喅鏂規硶鏄敤涓涓暟緇勬妸宸茬粡璁$畻榪囩殑鍊煎瓨璧鋒潵錛岃繖鏍峰氨涓嶄細閲嶅璁$畻浜嗐傝〃鏍煎寲鐨勭畻娉曟槸錛氭病鏈夐掑綊綆楁硶濂界悊瑙o紝瑙e喅鍔炴硶鏄細鍦ㄤ唬鐮佸紑澶村姞涓敞閲婏紝娉ㄩ噴灝辨槸閭e嚑鏉¢掑綊瑙勫垯錛屽ぇ涓嶄簡鍐嶅姞涓婅鏄?#8220;姝や唬鐮佺敤鐨勬槸鍔ㄦ佽鍒?#8221;銆?ps錛歭inux閲宒iff鐨勫熀鏈畻娉曞氨鏄姩鎬佽鍒掑惂錛屾劅瑙夊拰鏈闀垮叕鍏卞瓙涓茬被浼鹼紝鑷繁瀹炵幇浜嗕竴涓?<a title="diff.pl">diff.pl</a>)(鏇存柊錛氫粖澶╁湪緗戜笂鐪嬪埌浜嗗叧浜巇iff鐢ㄥ姩鎬佽鍒掑疄鐜扮殑淇℃伅錛?a title="Dynamic programming Creative Exercises 2 Unix diff" >Dynamic programming Creative Exercises 2 Unix diff</a>, 鍏舵簮鐮佷負<a title="diff.java" >diff.java</a> 錛屾瘮鎴戠殑濂戒簡N澶氬嶏紝鎵撳嵃緇撴灉鐨勯偅孌典唬鐮佺殑鎬濇兂鐩稿綋濂斤紒浠g爜綆媧佹竻娣呫傚彟澶栵紝鎴戝紑濮嬭寰楃敤琛ㄦ牸鍖栫殑鏂規硶瀹炵幇鍔ㄦ佽鍒掓洿甯呬簡銆?nbsp; 錛嶏紞2011.7.22 )銆?br /><br />    璇昏繖鏈功鏀惰幏寰堝錛屽垪涓懼嚑涓惂錛?br />    1. 涔﹂噷鐨?#8220;<a href="http://m.shnenglu.com/hex108/archive/2011/06/18/148907.html" title="紼嬪簭楠岃瘉">紼嬪簭楠岃瘉</a>” 鎶鏈緢闈犺氨錛岃紼嬪簭鐪嬭搗鏉ユ竻鏅版槗鎳傦紝榪樿兘浠庝竴瀹氱▼搴︿繚璇佹紜с?br />    2. “鍝ㄥ叺”(<a title="Sentinel value">Sentinel value</a> )琚嚑嬈$敤鍒頒簡錛屾劅瑙夎繕涓嶉敊錛屼唬鐮佺湅璧鋒潵鏇寸畝鍗曚簡錛岃繕鑳藉甫鏉ヤ竴鐐瑰皬灝忔晥鐜囥?br />    3. 鏃剁┖鎶樹腑涓庡弻璧€傚湪鍘熷璁捐鐨勭畻娉曞茍闈炴渶浣蟲柟妗堟椂錛岄氳繃鏀瑰杽綆楁硶鏄彲浠ヨ揪鍒板弻璧㈢殑銆?br />    4. 鐢ㄥ彧鍒嗛厤涓涓緝澶у唴瀛樺潡鐨勬柟妗堟潵鏇挎崲閫氱敤鍐呭瓨鍒嗛厤錛岃繖鏍峰氨娑堥櫎浜嗗緢澶?寮閿杈冨ぇ鐨勮皟鐢紝鑰屼笖涔熶嬌鐢ㄧ┖闂寸殑鍒╃敤鏇村姞鏈夋晥銆?br />    5. 鏁板妯″瀷鐨勫緩绔嬫槸寰堥噸瑕佺殑銆傛妸鏁癮鎯蟲垚鐢ㄩ泦鍚圼a,a + 1)琛ㄧず鏄9绔犱腑浜屽垎鏌ユ壘浠g爜璋冧紭鐨勬牳蹇冩濇兂銆傛暟緇勬棆杞偅涓畻娉曚篃瀹炲湪鏄おnb浜嗐?br />    6. 涓涓啓寰楀緢濂界殑浠g爜錛屽湪鍑犱釜鍦版柟鐪嬪埌榪囷紝鎬諱細蹇橈紝榪欐璁頒笅錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">  閾捐〃閲屾湁涓涓摠鍏靛厓绱狅紝鍒濆鏃? head </span><span style="color: #000000; ">=</span><span style="color: #000000; "> sentinel </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Node(value, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">);<br />  鍚戦摼琛ㄦ彃鍏ュ厓绱狅細 <br />  insert(v)<br />      </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&</span><span style="color: #000000; ">head; (</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">val </span><span style="color: #000000; "><</span><span style="color: #000000; "> t; p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&</span><span style="color: #000000; ">((</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">next))<br />          ;<br />      </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">  (</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)</span><span style="color: #000000; ">-></span><span style="color: #000000; ">val </span><span style="color: #000000; ">==</span><span style="color: #000000; "> v <br />          </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "><br />      </span><span style="color: #000000; ">*</span><span style="color: #000000; ">p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> node(v, </span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)<br /><br />  涓嬮潰鏄垜鍐欑殑錛?br />  insert(v)<br />        p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> head;<br />        </span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">(p</span><span style="color: #000000; ">-></span><span style="color: #000000; ">val </span><span style="color: #000000; "><</span><span style="color: #000000; "> t)<br />            p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> p</span><span style="color: #000000; ">-></span><span style="color: #000000; ">next<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p</span><span style="color: #000000; ">-></span><span style="color: #000000; "> val </span><span style="color: #000000; ">==</span><span style="color: #000000; "> v)<br />            </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "><br />        q </span><span style="color: #000000; ">=</span><span style="color: #000000; "> node(t,p)<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(p </span><span style="color: #000000; ">==</span><span style="color: #000000; "> head)<br />             head </span><span style="color: #000000; ">=</span><span style="color: #000000; "> q;</span></div><br />    鍙﹀錛屾敞鎰忓埌涓鏈功錛?a title="綆楁硶璁捐涓庡垎鏋愬熀紜">綆楁硶璁捐涓庡垎鏋愬熀紜</a>錛?錛岀敤涓嶅悓鐨勬柟寮忚綆楁硶錛屾妸綆楁硶鎸夊叾閫氱敤紼嬪害鎻愬嚭浜?涓渶鍩烘湰鐨勭畻娉曟濇兂錛欱rute force 錛?Divide & conquer 錛?Decrease & conquer錛?nbsp; Transform & conquer銆?<br /><br />    鏈鍚庢憳褰曚竴涓?絎?鐗堣穻 閲岀粰鐨勫嚑涓緩璁?<br />    1. 瑙e喅姝g‘鐨勯棶棰樸?棣栧厛褰誨簳鐞嗚В闂<br />    2. 鎺㈢儲鎵鏈夊彲鑳界殑瑙e喅鏂規<br />    3. 瑙傚療鏁版嵁<br />    4. 浣跨敤綺楃暐浼扮畻<br />    5. 寰楃敤瀵圭О鎬?<br />    6. 鍒╃敤緇勪歡鍋氳璁? <br />    7. 寤虹珛鍘熷瀷 <br />    8. 蹇呰鏃惰繘琛屾潈琛? <br />    9. 淇濇寔綆鍗? <br />    10.榪芥眰浼樼編</div><img src ="http://m.shnenglu.com/hex108/aggbug/150403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/hex108/" target="_blank">hex108</a> 2011-07-07 20:47 <a href="http://m.shnenglu.com/hex108/archive/2011/07/07/150403.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬綆楁硶鐨勪竴浜涜祫鏂?/title><link>http://m.shnenglu.com/hex108/archive/2011/07/01/149939.html</link><dc:creator>hex108</dc:creator><author>hex108</author><pubDate>Fri, 01 Jul 2011 12:27:00 GMT</pubDate><guid>http://m.shnenglu.com/hex108/archive/2011/07/01/149939.html</guid><wfw:comment>http://m.shnenglu.com/hex108/comments/149939.html</wfw:comment><comments>http://m.shnenglu.com/hex108/archive/2011/07/01/149939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/hex108/comments/commentRss/149939.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/hex108/services/trackbacks/149939.html</trackback:ping><description><![CDATA[<span style="font-family: verdana, 'courier new'; font-size: 14px; line-height: 21px; ">綆楁硶鐨勮繃紼嬪緢璇︾粏錛岀編涓笉瓚崇殑鏄?/span>鏈鍩烘湰鏈甯哥敤鐨勯偅浜涚畻娉曞叾瀹炴槸姣旇緝灝戠殑錛岃姳鐐規椂闂村鎯蟲兂涓轟粈涔堬紝鐭ュ叾鐒惰繕瑕佺煡鍏舵墍浠ョ劧(<a title="1" >1</a>錛?a title="2">2</a>)錛岃繖鏍鋒墠鑳芥椿瀛︽椿鐢ㄣ?br /><br />1. 涔? <br />1.1 <a title="緙栫▼鐝犵帒">緙栫▼鐝犵帒</a><br />    璦綆鎰忚祬錛屽洖鍛蟲棤絀楓傛湰涔︾殑緗戠粶鐗堝湪 <a title="http://netlib.bell-labs.com/cm/cs/pearls/">http://netlib.bell-labs.com/cm/cs/pearls/</a> 涓婏紝闄勬湁婧愪唬鐮併?<a href="http://m.shnenglu.com/hex108/archive/2011/07/07/150403.html" title="榪欓噷">榪欓噷</a>鏈夋垜鐨勮涔︽葷粨銆?鍙楀埌姝や功鐨勫獎鍝嶏紝鎴戝浠g爜浜х敓浜嗗緢寮虹殑媧佺櫀錛屽潥淇′唬鐮佽繕鍙互鍐欏緱鏇翠紭緹庯紝鏇磋壓鏈傛澶栭潰瀵逛竴涓棶棰樻椂鍒嗘瀽鐨勮搴︽洿澶氫簡銆?br /><br />1.2 <a title="緙栫▼涔嬬編" >緙栫▼涔嬬編</a><br />     涔︿笂鐨勬瘡涓閮戒細浠旂粏鍦板仛錛屽茍瀹屾垚浠g爜銆傛濊冪殑涔愯叮鏄棤絀風殑錛屾椂甯鎬細鏈変箰瓚c?br /><br />1.3 <a title="綆楁硶瀵艱" >綆楁硶瀵艱<br /></a>   緇忓吀浣嗘槸姣旇緝鍘氾紝閫傚悎緋葷粺鍦板涔犵畻娉曪紝鑰屽悗姣忔閬囧埌涓嶆噦鐨勫彲浠ュ啀鏌ラ槄錛?div style="display: inline-block; "></div>綆楁硶鐨勮繃紼嬪緢璇︾粏錛岀編涓笉瓚崇殑鏄病鏈夌煡鍏舵墍浠ョ劧鐨勬劅瑙夈傜湅姝や功絎竴閬嶆椂錛屾槸鎸夌収涔︾殑欏哄簭鐪嬬殑錛屽榪欎簺綆楁硶澶ц嚧閮芥湁鐔熸倝浜嗐傚悗鏉ヤ細鍋跺皵鏌ラ槄銆傜幇鍦ㄤ負浜嗗噯澶囩畻娉曪紝浼氭椂甯告煡闃呮涔︺?a title="綆楁硶瀵艱" ><br /></a><br />2. 鏂囩珷<br />2.1 <a title="Do We Teach the Right Algorithm Design Techniques ?" >Do We Teach the Right Algorithm Design Techniques ?</a> <br />   鎶婄畻娉曟寜鍏墮氱敤紼嬪害鎻愬嚭浜?涓渶鍩烘湰鐨勭畻娉曟濇兂錛欱rute force 錛?Divide & conquer 錛?Decrease & conquer錛?nbsp; Transform & conquer銆?br />   璇誨畬鍚庡彲浠ュ綆楁硶鐨勬暣浣撴湁鏇村ソ鐨勬帉鎻°?br /><br />3. 緗戠粶鏁欑▼<br />3.1 <a title="Top Coder鐨刟lgorithm tutorial">Top Coder鐨刟lgorithm tutorial</a><img src ="http://m.shnenglu.com/hex108/aggbug/149939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/hex108/" target="_blank">hex108</a> 2011-07-01 20:27 <a href="http://m.shnenglu.com/hex108/archive/2011/07/01/149939.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>浜屽垎鏌ユ壘 -- 鏉ヨ嚜緙栫▼鐝犵帒http://m.shnenglu.com/hex108/archive/2011/06/18/148907.htmlhex108hex108Sat, 18 Jun 2011 07:02:00 GMThttp://m.shnenglu.com/hex108/archive/2011/06/18/148907.htmlhttp://m.shnenglu.com/hex108/comments/148907.htmlhttp://m.shnenglu.com/hex108/archive/2011/06/18/148907.html#Feedback3http://m.shnenglu.com/hex108/comments/commentRss/148907.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/148907.htmlBinary search algorithm錛夋槸涓涓緢甯歌鐨勭畻娉曪紝浠庯紲緙栫▼鐝犵帒錛為噷鍐嶆鐪嬪埌鏃跺張鏈夋柊鐨勬敹鑾楓?br />      鐩存帴鐪嬩唬鐮佸惂錛屼笅闈㈡槸甯歌鐨勫疄鐜頒唬鐮侊細
    
int binary_search(int *a, int num, int t)
{
    
int start = 0, end = num - 1;
    
    
while(end >= start){
        
int middle = (start + end) / 2;
        
int tmp = a[middle];
        
if(tmp < t){
            start 
= middle + 1;
        }
else if(tmp > t){
            end 
= middle - 1;
        }
else{
            
return middle;
        }
    }

    
return -1;
}   

      浼樺寲鍚庣殑浠g爜涓猴紙榪欎釜浼樺寲鐨勬濇兂涔熸尯濂界殑錛屼笉鐭ラ亾鏈夋病鏈変竴濂楃郴緇熺殑鏂規硶鏉ユ濊冨嚭榪欎釜浼樺寲鎬濊礬錛夛細
     
int binary_search(int *a, int num, int t)
{
    
int low = -1, high = num - 1;
    
    
while(low + 1 != high){
        
int middle = (low + high) / 2;
        
if(a[middle] < t){
            low 
= middle;
        }
else{
            high 
= middle;
        }
    }
    
    
if(a[high] != t)
        
return -1;
    
else
        
return high;
}
 
     濡傛灉鐩存帴鐪嬭繖孌典唬鐮侊紝鏈夊彲鑳戒笉鐭ラ亾鏄庝箞鍥炰簨銆備絾鏄繍鐢ㄤ功涓彁鍒扮殑“紼嬪簭楠岃瘉”鐨勬柟娉曞悗錛屽師鐞嗗氨鏄捐屾槗瑙佷簡錛屼慨鏀瑰悗鐨勪唬鐮佷負錛?br />
 1 int binary_search(int *a, int num, int t)
 2 {
 3     int low = -1, high = num - 1;
 4     
 5     //invariant: low < high && a[low] < t && a[high] >= t
 6     while(low + 1 != high){
 7         int middle = (low + high) / 2錛濓紳錛?/span>  int middle = low + (high - low) / 2;   //闃叉婧㈠嚭
 8         if(a[middle] < t){
 9             low = middle;
10         }else{
11             high = middle;
12         }
13     }   
14    //assert錛氥low +1 = high && a[low] < t && a[high] >= t
15   
16     if(a[high] != t)
17         return -1;
18     else
19         return high;
20 }
21 

      “紼嬪簭楠岃瘉” 鐨勬濇兂鍙互綆榪頒負錛氫笉綆℃槸楠岃瘉涓涓嚱鏁幫紝榪樻槸涓鏉¤鍙ワ紝涓涓帶鍒剁粨鏋勶紙寰幆錛宨f鍒嗘敮絳夛級錛岄兘鍙互閲囩敤涓や釜鏂█錛堝墠緗潯浠跺拰鍚庣疆鏉′歡錛夋潵杈懼埌榪欎釜鐩殑銆傚墠緗潯浠舵槸鍦ㄦ墽琛岃澶勪唬鐮佷箣鍓嶅氨搴旇鎴愮珛鐨勬潯浠訛紝鍚庣疆鏉′歡鐨勬紜у湪鎵ц瀹岃澶勪唬鐮佸悗蹇呴』寰楀埌淇濊瘉銆傦紙ps: 鏂█涔熺畻鏄竴縐嶉獙璇佺殑鎵嬫錛?br />
銆銆涓婇潰榪欐浠g爜鐨勫師鐞嗘槸緇欏畾涓孌靛尯闂?(low, high] 錛屽鏋滄簚瓚?a[low] < t  && a[high] >=t && high = low + 1錛岄偅涔堟湁涓ょ鎯呭喌瀛樺湪錛?. a[high] = t ; 2.涓巘鐩哥瓑鐨勫厓绱犱笉瀛樺湪銆傜敱浜庢暟緇刟 鑲畾婊¤凍鏉′歡a[low] < t  && a[high] >=t錛屾墍浠ヨ綆楁硶瑕佸仛鐨勫氨鏄妸鍖洪棿 (-1, num -1] 緙╁皬鍒?low, low+1]銆?銆
      1. 鍦ㄦ墽琛屼唬鐮?~17琛屾椂錛?span>濮嬬粓淇濊瘉low < high && a[low] < t && a[high] >= t 鎴愮珛銆?/span>
銆銆
2. 鍦ㄦ墽琛屽畬6~17琛屽悗錛岃偗瀹氭豢瓚蟲潯浠禷[low] < t  && a[high] >=t && high = low + 1錛屽洜涓哄驚鐜鍑虹殑鏉′歡鏄?high = low + 1錛岃岃寰幆濮嬬粓淇濊瘉涓婇潰絎紤鏉°?br />銆銆緇忚繃榪欐牱鐨勫垎鏋愬悗錛屾垜浠兘瀵圭▼搴忕殑姝g‘鎬ф湁鏇村ソ鐨勬帉鎻★紝鍚屾椂紼嬪簭涔熸洿鏄撶悊瑙c?br />
鍙傝冿細
銆銆錛? 鍩烘湰涓婃憳鑷紲緙栫▼鐝犵帒錛烇紝寰堜笉閿欑殑涓鏈功錛岃鎴戝綆楁硶鏈変簡鏂扮殑鎬濊冿紝浠ュ墠鍙槸鐪嬬湅綆楁硶瀵艱濡備綍瀹炵幇鐨勶紝娌℃湁鎬濊冭綆楁硶鏄浣曟兂鍑烘潵鐨勶紝鏈夋病鏈夋洿綆鍗曠殑綆楁硶錛堟濊冪殑榪囩▼綾諱技鍒樻湭楣忕殑錛?a title="鐭ュ叾鎵浠ョ劧錛堢畫錛?>鐭ュ叾鎵浠ョ劧錛堢畫錛?/a>錛烇級錛岃鍧氭寔榪欎釜鎬濊冭繃紼嬮渶瑕佸緢澶氬姛澶笌鏃墮棿錛屼絾鏁堟灉涔熷緢鏄庢樉錛岃兘瀵圭畻娉曟湁鏇村ソ鐨勬帉鎻°?img src ="http://m.shnenglu.com/hex108/aggbug/148907.html" width = "1" height = "1" />

hex108 2011-06-18 15:02 鍙戣〃璇勮
]]>
gdb,strace閭d簺涓嶅父鐢ㄧ殑鍔熻兘http://m.shnenglu.com/hex108/archive/2011/05/17/146600.htmlhex108hex108Tue, 17 May 2011 13:14:00 GMThttp://m.shnenglu.com/hex108/archive/2011/05/17/146600.htmlhttp://m.shnenglu.com/hex108/comments/146600.htmlhttp://m.shnenglu.com/hex108/archive/2011/05/17/146600.html#Feedback3http://m.shnenglu.com/hex108/comments/commentRss/146600.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/146600.html
gdb榪愯鏃朵細棣栧厛鍔犺澆 ~/.gdbinit鏂囦歡
渚嬪錛氭垜鍦╠ebug鏃訛紝姣忔閮介渶瑕佽繘琛宧andle SIGBUS noprint pass鏉ュ鐞哠IGBUS淇″彿錛岃繖縐嶆儏鍐靛氨鍙互鎶婂畠鍐欏叆 .gdbinit鏂囦歡銆?
鍦?gdbinit閲屼篃鍙互瀹氫箟鍑?
eg: 鍦?gdbinit閲屽畾涔塸rint_regs
def print_regs
i r eax ebx ecx edx
end
(gdb) print_regs
eax 0xbffff4a4 -1073744732
ebx 0x28bff4 2670580
ecx 0x902c5562 -1876142750
edx 0x1 1  闃呰鍏ㄦ枃

hex108 2011-05-17 21:14 鍙戣〃璇勮
]]>
Debughttp://m.shnenglu.com/hex108/archive/2011/05/17/146592.htmlhex108hex108Tue, 17 May 2011 12:26:00 GMThttp://m.shnenglu.com/hex108/archive/2011/05/17/146592.htmlhttp://m.shnenglu.com/hex108/comments/146592.htmlhttp://m.shnenglu.com/hex108/archive/2011/05/17/146592.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/146592.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/146592.html     debug鍙互甯姪鐔熸倝緋葷粺錛屽彲鏄椂闂撮暱浜嗕細寰堢柌鍗鳳紝鐗瑰埆鏄満姊扮殑璋冭瘯錛屽鏋滆繕瑕侀潰瀵規潅涔辯殑浠g爜錛屾洿鏄洩涓婂姞闇溿傛墍浠ヨ瀛︾潃浠巇ebug涓捇鎺㈠揩涔愶紝鍦ㄧ郴緇熺殑璋冭瘯榪囩▼涓彂鎸ユ兂璞★紝灝濊瘯涓嶅悓鐨刣ebug鏂規硶銆?/p>

    鏈榪戠湅浜嗐婅蔣浠惰皟璇曞疄鎴樸嬶紝緇撳悎鑷繁鐨勭粡鍘嗭紝鎬葷粨浜嗕竴涓嬶細

    1. 涓庢祴璇曠敤渚嬬浉鍏?/p>

       a. 濡傛灉涓嶈兘杈懼埌“嫻嬭瘯鍏堣”錛岃嚦灝戝簲璇ュ湪鍐欏畬浠g爜鍚庢湁鐩稿瀹屾暣鐨勬祴璇曠敤渚嬨傚浜庢紜х殑淇濊瘉鍜屼互鍚庨噸鏋勪唬鐮侀兘鏄湁濂藉鐨勩?/p>

       b. 姣忔娣誨姞鏂板姛鑳芥垨淇浜嗕竴涓猙ug鏃訛紝閮藉簲璇ュ鍔犳祴璇曠敤渚嬶紒A鍘嗙粡鍗冭緵涓囪嫤緇堜簬fix 浜嗕竴涓猙ug錛屽緢涔呭緢涔呬互鍚庯紝B瑙夊緱榪欐浠g爜闇瑕佹敼鏀癸紝浜庢槸鏀逛簡鏀癸紝鍚庢潵鐨勭粨鏋滆繕鏄敼浜嗭紝鑰屼笖欏哄埄鎻愪氦鍒頒簡搴撻噷錛堝洜涓篈褰撴椂閬囧埌鐨刡ug 騫舵病鏈夊嚭鐜幫紒錛?/p>

       c. 鍥炲綊嫻嬭瘯

         淇敼浠g爜鍚庤繘琛屽洖褰掓祴璇曘傛瘡嬈℃彁浜や竴涓増鏈悗鑷姩榪涜鍥炲綊嫻嬭瘯錛屼繚璇佸簱閲岀殑浠g爜鐨勬紜с?

       d. 綆鍖栨祴璇曠敤渚?

         濂藉錛氬彲浠ユ帓闄や笉璧蜂綔鐢ㄧ殑鍥犵礌錛涘噺灝戞祴璇曠敤渚嬬殑榪愯鏃墮棿錛涙渶閲嶈鐨勬槸錛屼嬌鐢ㄦ祴璇曠敤渚嬫洿瀹規槗璋冭瘯錛堣皝鎰挎剰澶勭悊閭d簺濉厖浜嗘暟鐧炬垨鏁板崈欏圭殑鏁版嵁瀹瑰櫒鍛紵錛?

         鏂規硶濡傦細 濡傛灉嫻嬭瘯渚嬪瓙姣旇緝濂芥敼錛屽彲浠ュ皢鍏舵敼灝忥紱灝嗚緭鍏ラ泦鏀瑰皬

       e. 瀹屾垚浠g爜錛屾竻鐞嗗悗閲嶆柊榪愯鎵鏈夋祴璇曠敤渚嬨?

    2. 鍏充簬紼嬪簭鐨勭紪璇?

      a. 閲嶈緙栬瘧鏈熼棿鐨剋arning錛屾渶濂芥妸warning鏁板噺涓?. 涓嶈蹇界暐緙栬瘧鍣ㄨ鍛婏紝鍗充嬌瀹冧滑鍙兘鏄棤瀹崇殑銆?

eg錛?

int add(int a,int b){

        return a +b ;

}

緇撴灉澶存枃浠墮噷澹版槑鎴愪簡 extern int add(long a,int b)

浼氳皟璇曟浜哄晩錛岃皟紼嬪簭鐨勬椂鍊欎竴鐪嬬▼搴忓畾涔夋槸瀵圭殑鍟婏紝鎬庝箞浼犵殑鍙傛暟涓涓嬪氨鍙樹簡錛?

b. 濡傛灉鍑虹幇鑾悕鍏跺鐨勯敊璇?

      濡傛灉鏄敤Makefile緇勭粐宸ョ▼鏃訛紝鑰冭檻make clean錛屾湁鍙兘淇敼鏁版嵁緇撴瀯鎴栧ご鏂囦歡鍚庢敼鍙樹簡涓浜涗笢瑗匡紝浣嗘槸鐢變簬涓浜涙湭鐭ュ師鍥犺鏂囦歡騫舵湭閲嶆柊緙栬瘧銆傚鏋滃嚱鏁版槸C鍑芥暟錛屾湁鍙兘璋冪敤鑰呭拰琚?璋冪敤鑰呯殑鍙傛暟鐨勬垚鍛樺拰綾誨瀷涓嶅悓銆傚鏋滀竴涓被鏂規硶錛屽垯璁塊棶浠諱綍綾繪垚鍛?閮藉皢鍙戠敓閿欒錛屽洜涓鴻繖涓や釜綾葷殑鍐呭瓨鑰屽凡鍑犱箮鏄畬鍏ㄤ笉鍚岀殑銆傝繖鍙兘瀵艱嚧Segmentation falut,鎴栨槸寰堜箙涔嬪悗鎵嶈兘媯嫻嬪埌鐨勫唴瀛樼牬鍧忋?

3. 鍏充簬閾炬帴

a. 閾炬帴鍣ㄧ殑鍩烘湰宸ヤ綔鍘熺悊

       緙栬瘧鍣ㄦ垨姹囩紪紼嬪簭灝嗘簮浠g爜杞崲涓烘満鍣ㄤ唬鐮侊紝騫惰緭鍑哄璞¤皝鐨勩傚璞℃枃浠朵腑鍖呭惈絎﹀彿錛堝嚱鏁版垨鍙橀噺錛夛紝榪欎簺絎﹀彿鏈夌殑鍦ㄦ湰妯″潡瀹氫箟鐨勶紝鏈夌殑鍦ㄥ叾浠栨ā鍧楀畾涔夌殑錛岄摼鎺ュ櫒灝卞湪閾炬帴瀵硅薄鏂囦歡鏃舵妸榪欎簺鏈畾涔夌殑絎﹀彿涓庡畾涔夊畠鐨勬ā鍧楀搴旇搗鏉ャ?

b. 閾炬帴欏哄簭

     鏈夊簱鍜屽綊妗f枃浠舵椂 閾炬帴綆楁硶鏄笉涓鏍風殑銆?nbsp;   

     閾炬帴鍣ㄥ弬鏁伴『搴忓緢閲嶈錛屽浜庣紪璇戝崟鍏冿紙濡傚璞℃枃浠跺拰搴擄級鍜屾悳绱㈣礬寰勬潵璇撮兘鏄姝ゃ?

c. C++涓嬌鐢–浠g爜鏃訛紝鐢╡xtern c{} 鎶奀浠g爜鍖呰涓涓嬨?

     鍏充簬 c++絎﹀彿鍜屽悕縐版敼緙栵細C++鍏佽閲嶈澆鍑芥暟錛屼負浜嗙敓鎴怌++浠g爜鍏冪礌鐨勫敮涓絎﹀彿錛岀紪璇戝櫒浣夸竴縐嶇О涓哄悕縐版敼緙栵紙name mangling錛夌殑鎶鏈紝瀹冨皢瀵硅薄鐨勫噯紜鏍艱鏄庯紙濡備細鍛樺悕絀洪棿鍜屽嚱鏁板弬鏁扮殑涓暟鍙婄被鍨嬶級緙栫爜鍒扮鍙蜂腑銆傦紙鍙互鐢╟++filt瑙f瀽鍑烘潵~ eg: c++filt _Z9factoriali鐨勭粨鏋滀負factorial(int)錛?

d. 鐜鍙橀噺

   LD_LIBRARY_PATH浼氬獎鍝嶅姩鎬佸姞杞界殑搴擄紝鐢↙DD鍙互鐪嬪埌紼嬪簭渚濊禆鍝釜鍔ㄦ佸簱

4. 鑷姩鍖栨祴璇?

   璁╀竴鍒囪嚜鍔ㄥ寲璧鋒潵銆傚鏋滈噸澶嶇殑鍋氫竴浠朵簨錛屽氨寰堟湁蹇呰鑰冭檻鑷姩鍖栦簡銆?

5. 鍏充簬閭d簺鎬紓鐨勯敊璇?

    鍦ㄤ竴浜涙樉鑰屾槗瑙佹湁鍐呭瓨闂鐨勬儏鍐典笅錛屽錛氶棿姝囨晠闅滃拰鏃犳硶瑙i噴鐨勯殢鏈鴻涓猴紝榪欐椂鑰冭檻浣跨敤鍐呭瓨璋冭瘯鍣ㄤ簡錛?

    濡倂algrind錛屽緢濂界敤錛屼篃寰堢畝鍗曘?

    valgrind –tool=massif your_program 榪涜鍐呭瓨鍓栨瀽錛堟嫻嬪唴瀛樺垎閰嶆儏鍐碉紝浼樺寲鍐呭瓨浣跨敤錛?

    valgrind –tool=memcheck your_program 榪涜鍐呭瓨媯鏌ワ紙媯嫻嬫棤鏁堢殑鍐欒闂紝媯嫻嬪鏈垵濮嬪寲鐨勫唴瀛樼殑璇誨彇鎿嶄綔錛屾嫻嬪唴瀛樻硠闇茬瓑錛?

    valgrind –tool=helgrind your_program 鏌ユ壘绔炰簤鏉′歡錛屽彲浠ョ敤鏉ヨ緟鍔╄皟璇曞綰跨▼紼嬪簭

    valgrid –-db-attac=yes鐨勫姛鑳藉緢濂界敤錛屽彲浠ュ皢鍐呭瓨楂樺害鍣ㄥ拰婧愪唬鐮佹祴璇曞櫒錛堝gdb錛夌粨鍚堣搗鏉ワ紝榪欐牱灝卞彲浠ュ嵆鏃舵煡鐪嬪綋鏃剁殑鍙橀噺鐨勫鹼紝寰堝ソ鐢紒

6. 闈欐佹鏌ュ櫒

   浣滀負甯歌杞歡鏋勫緩榪囩▼涓殑涓閮ㄥ垎榪愯錛岀敤浜庢煡鎵句竴浜涘彲閫氳繃闈欐佹簮浠g爜鍒嗘瀽鍙戠幇鐨勭壒瀹歜ug銆?

7. 鍏充簬榪愯鏃跺墫鏋愬伐鍏?

     涓嶈緙栧啓鑷繁鐨勮繍琛屾椂鍓栨瀽鏃跺伐鍏鳳細鑷繁闇炲弸浜戞湅涓鐨勫墫鏋?宸ュ叿閫氬父浣跨敤緋葷粺璋冪敤time()鎴朿time()鏉ユ祴閲忔椂闂淬傝繖浜涚郴緇熻皟鐢ㄧ殑闂鏄紑閿寰堥珮錛岃屼笖鍑嗙‘搴︿綆銆傚彟澶勫湪鍓栨瀽鏈熼棿瑕佹敹闆嗗ぇ閲忔暟鎹紝鍙兘浼氬獎鍝嶇▼搴忔湰韜殑琛屼負銆?

8. 鐜鍙橀噺

  濡傜▼搴忕殑琛屼負鍙兘 渚濊禆浜庡綋鍓嶅伐浣滅洰褰曘傚湪linux涓婏紝鐩綍琚敞鍐屽埌鐜鍙橀噺CWD涓娿傝繖涓猙ug紕板埌榪囷紝榪樺鑷翠簡姝婚攣銆?

9. 璇誨彇鎭板綋鐨勯敊璇秷鎭?

  鏌愪釜鍦版柟鍑洪敊鏃訛紝婊″睆閮芥槸閿欒娑堟伅鏃訛紝搴旇閲嶇偣鍏蟲敞鍝簺娑堟伅錛?

  Answer: 棣栧厛鍑虹幇鐨勯偅浜涙秷鎭紒鍥犱負鍚庨潰鐨勬秷鎭湁鍙兘鏄墠闈㈠鑷寸殑銆傝繖鍜岀紪璇戝嚭閿欐椂鐨勬儏鏅竴鑷達細緙栬瘧閿欒鏈夊緢澶氾紝鎴戜滑鑲畾浼氱洿瑙夊湴鍘誨鎵劇涓涓嚭閿欑殑 鍦版柟錛岃皝鐭ラ亾鏄笉鏄皯浜嗕釜鎷彿瀵艱嚧鍚庨潰涓榪炰覆鐨勯敊璇?

10. bug涓嶄細鑷姩娑堝け

      濡傛灉鏌愪釜鐗堟湰鏈塨ug錛寀pdate鍚庯紝bug娑堝け浜嗭紝“鐪熷ソ錛?#8221;錛屼竴瀹氳寮勬竻妤歜ug鍑虹幇鐨勫師鍥犳槸浠涔堛備互鍓嶉亣鍒拌繃涓涓猙ug錛屽鍔犱竴鏉rintf璇彞鍚庯紝bug娑堝け浜嗭紒鏈鍚庡彂鐜伴棶棰樻槸鏁扮粍瓚婄晫浜嗭紝鑰屼慨鏀規簮浠g爜浼氬鑷翠唬鐮佹錛屾暟鎹鐨勫竷灞絳夋敼鍙橈紝鎵浠ヤ細瀵艱嚧鍋跺皵瀵廣傦紙榪欑鎯呭喌鍙互姹傚姪浜庡唴瀛樿皟璇曞伐鍏鋒垨鑰呴潤鎬佹鏌ョ殑宸ュ叿錛?

11. 瀛︿範浣跨敤gcc, gdb,strace 絳夊伐鍏楓傦紙鐔熸倝浠ュ悗鍙互鍐嶆寲鎺樻寲鎺橈紝鍙兘鏈夋儕鍠滐級

12. cvs/svn commit涔嬪墠涓瀹氳diff涓涓嬶紝鐪嬪仛浜嗗摢浜涗慨鏀癸紝浠ラ伩鍏嶄笉灝忓績鍒犳帀涓浜涗笢瑗垮悗錛岀劧鍚?#8221;琚彁浜?#8221;浜嗐?

鏈鍚庯紝鏈寮哄ぇ鐨勫伐鍏蜂笉鍦ㄨ綆楁満涓紝鑰屾槸璋冭瘯鑰呯殑鍒ゆ柇鍔涘拰鍒嗘瀽鎶宸с?/p>

   鍙傝冭祫鏂欙細

   1. 銆婅蔣浠惰皟璇曞疄鎴樸嬶細http://book.douban.com/subject/4231293/



hex108 2011-05-17 20:26 鍙戣〃璇勮
]]>
shell緙栫▼ : Remember that the shell spends a lot of its life substituting texthttp://m.shnenglu.com/hex108/archive/2011/04/23/144812.htmlhex108hex108Fri, 22 Apr 2011 16:23:00 GMThttp://m.shnenglu.com/hex108/archive/2011/04/23/144812.htmlhttp://m.shnenglu.com/hex108/comments/144812.htmlhttp://m.shnenglu.com/hex108/archive/2011/04/23/144812.html#Feedback0http://m.shnenglu.com/hex108/comments/commentRss/144812.htmlhttp://m.shnenglu.com/hex108/services/trackbacks/144812.html        瀵箂hell涓嶇啛錛屽伓灝斾細鐜頒竴浜涙垜鏃犳硶鐞嗚В鐨勭幇璞°傛鏃惰榪涜debug浜嗭紝鍙夌殑鏂規硶鏈?
        a. echo鍙橀噺鐨勫?nbsp;
        b. shell –x
   
        姝ゅ錛?font color="#ff0000">Remember that the shell spends a lot of its life substituting text.錛?a >http://linuxcommand.org/wss0100.php錛変緥濡傦紝瀵逛簬涓嬮潰鐨勭▼搴忥細
hex108@Gentoo ~ $ cat test.sh 
#!/bin/sh
var=
if [ $var = "y" ] ;then
    echo "yes"
fi
        if璇彞閲岀殑var鍙橀噺緇忔浛鎹㈠悗鍙樹負 if [ = "y" ]錛屼簺鏃跺綋鐒朵細鍑洪敊銆?br />
hex108@Gentoo ~ $ ./test.sh 
./test.sh: line 3: [: =: unary operator expected

          
        ps:鐜板湪鍐欒剼鏈殑鏃跺欏懼悜浜庝嬌鐢╬erl,鑰岃緝灝戜嬌鐢╯hell 錛屽洜涓哄浜庣粡甯鎬嬌鐢ㄧ殑鑴氭湰錛屽彲鑳戒細緇忓父闇瑕佸瀹冧笉鍋滃湴榪涜鏀硅繘錛屾參鎱㈢殑錛岀▼搴忚秺鏉ヨ秺澶э紝璇ヨ冭檻閲嶆瀯浜嗭紝   姝ゆ椂鎵嶄細鍙戠幇perl(python絳?#8220;鐪熸鐨?#8221;鑴氭湰璇█)姣攕hell鐩稿鏉ヨ鏇村ソ閲嶆瀯銆?/p>

hex108 2011-04-23 00:23 鍙戣〃璇勮
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美中文在线视频| 亚洲综合99| 国产精品捆绑调教| 国产精品久久久久久久app| 欧美日韩国产成人| 欧美日韩一二三区| 国产欧美在线看| 在线免费不卡视频| 日韩一本二本av| 亚久久调教视频| 久久野战av| 亚洲国产日韩欧美一区二区三区| 欧美激情一二区| 欧美一级视频免费在线观看| 国产精品毛片在线看| 国产乱码精品一区二区三区忘忧草| 国产日产精品一区二区三区四区的观看方式 | 老司机免费视频一区二区三区| 欧美ed2k| 国产精品一区二区久久国产| 在线视频国产日韩| 亚洲视频在线观看网站| 久久影院午夜片一区| 99热在这里有精品免费| 久久视频在线免费观看| 国产精品国产自产拍高清av| 狠狠色丁香婷婷综合影院| 999亚洲国产精| 久色婷婷小香蕉久久| 在线视频精品一| 亚洲三级免费观看| 久久久噜噜噜久噜久久| 欧美日韩不卡视频| 美女久久网站| 国产精品一区二区黑丝| 亚洲第一网站| 久久成人资源| 99xxxx成人网| 欧美成人伊人久久综合网| 韩国成人精品a∨在线观看| 亚洲一区二区三区四区五区黄 | 亚洲国产一区视频| 久久精品国产亚洲aⅴ| 一区二区三区免费在线观看| 免费在线看一区| 在线观看成人网| 久久网站热最新地址| 宅男精品视频| 欧美性猛交99久久久久99按摩| 日韩一区二区免费高清| 欧美激情1区2区| 久久综合九色综合久99| 国产一区二区三区日韩| 欧美一区二区三区日韩视频| 亚洲一区久久| 国产精品网红福利| 欧美专区在线观看| 午夜一区二区三区在线观看| 国产精品日韩欧美一区二区三区| 亚洲特黄一级片| 欧美黄污视频| 亚洲午夜三级在线| 国产精品乱码一区二三区小蝌蚪| 亚洲无线一线二线三线区别av| 亚洲精品之草原avav久久| 欧美国产综合| 在线亚洲精品福利网址导航| aⅴ色国产欧美| 国产精品久久久久aaaa| 羞羞答答国产精品www一本| 午夜精品美女自拍福到在线| 国产欧美日韩专区发布| 久久精品中文| 美国成人直播| 一区二区欧美激情| 国产精品99久久久久久www| 国产伦精品一区二区三区照片91| 久久久国产精品一区二区三区| 久久免费视频在线| 日韩视频一区二区在线观看| 制服诱惑一区二区| 狠狠色综合日日| 最新国产成人av网站网址麻豆| 欧美久久久久久| 欧美一级日韩一级| 蜜桃av久久久亚洲精品| 亚洲天堂av电影| 久久久xxx| 亚洲视频在线观看网站| 欧美一区二区三区播放老司机| 在线观看亚洲精品| 国产精品99久久不卡二区 | 国产视频久久| 欧美激情黄色片| 国产精品久久久免费| 免费成人黄色| 国产精品盗摄一区二区三区| 老司机精品福利视频| 欧美视频亚洲视频| 免费的成人av| 国产精品一区三区| 亚洲精品国产精品国自产在线 | 亚洲第一区中文99精品| 国产精品女人久久久久久| 欧美二区视频| 国产欧美精品| 亚洲私拍自拍| 亚洲精品久久久久久久久久久久| 亚洲欧美综合v| 亚洲一区二区不卡免费| 欧美国产日韩精品免费观看| 美女主播视频一区| 国产亚洲人成网站在线观看| 一本一本久久| 日韩午夜视频在线观看| 久久蜜臀精品av| 久久久99精品免费观看不卡| 欧美婷婷在线| 日韩视频在线一区| 亚洲巨乳在线| 在线观看日韩av| 午夜精品久久久久久久蜜桃app| 久久狠狠久久综合桃花| 在线国产欧美| 牛牛影视久久网| 欧美国产精品va在线观看| 日韩视频亚洲视频| 亚洲在线观看免费视频| 亚洲黄色免费网站| 欧美在线视频一区二区| 午夜精品国产| 欧美日本不卡高清| 久久夜色精品国产噜噜av| 国产精品国产亚洲精品看不卡15 | 欧美精品偷拍| 亚洲淫性视频| 老司机午夜精品视频| 美女精品网站| 亚洲人成在线播放网站岛国| 国内精品久久久久影院优| 精品51国产黑色丝袜高跟鞋| 亚洲国产免费看| 久久久一区二区三区| 久久久久se| 狠狠色综合色区| 久久久久久久999精品视频| 久久免费少妇高潮久久精品99| 国产日韩一区二区三区在线| 亚洲欧美日韩网| 久久久久久久高潮| 伊人久久亚洲美女图片| 久久久一区二区| 亚洲欧洲日产国产网站| 一本一本a久久| 国产精品一卡| 久久久九九九九| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日韩亚洲视频一区| 亚洲人成毛片在线播放女女| 亚洲免费大片| 国产精品一区二区三区乱码 | 久久国产毛片| 国产综合久久| 欧美高清视频一区二区三区在线观看| 亚洲电影一级黄| 亚洲欧美文学| 亚洲成人资源网| 欧美三级视频在线播放| 欧美亚洲免费电影| 亚洲国产乱码最新视频| 亚洲欧美日韩精品久久亚洲区 | 国产精品极品美女粉嫩高清在线| 亚洲欧美一区二区视频| 亚洲电影在线免费观看| 亚洲欧美精品在线观看| 亚洲大胆av| 国产精品一页| 欧美成人免费在线观看| 亚洲欧美日韩精品久久久| 亚洲激情不卡| 久久亚洲私人国产精品va媚药| aa级大片欧美三级| 精品999网站| 国产女人精品视频| 欧美喷潮久久久xxxxx| 久久精品一区| 亚洲性夜色噜噜噜7777| 亚洲免费观看| 欧美激情精品久久久久久大尺度| 欧美一区二区日韩一区二区| 亚洲免费观看在线观看| 伊人成人开心激情综合网| 国产精品久久久久一区二区三区共| 免费亚洲婷婷| 久久精品中文字幕一区| 亚洲一区二区三区久久| 亚洲精选久久| 亚洲人体偷拍| 亚洲国产女人aaa毛片在线| 欧美成熟视频|