2016-09-21 47 views
2

當第四個參數的值等於「abc」時,我想設置一個條件斷點。基於字符串參數的WinDBG條件斷點

void FunctionA(char* a, char* b, char* c, char* d) 
{ 
`enter code here`//some code here 
} 

我使用下面的命令,但它不起作用。你能幫忙嗎?

bp app!FunctionA "as /mu ${/v:MyAlias} poi(d);.block{.if ($spat(\"${MyAlias}\", \"abc\") == 0) { } .else { gc } }" 

注意:app.exe是我的應用程序名稱。

+0

「不起作用」是什麼意思?它是否破裂?它執行命令還是不執行?它是否繼續在錯誤的情況下?它是否設置了別名?是否有錯誤訊息? –

+0

謝謝你,托馬斯。它不會中斷。 –

+0

對不起,我的意思是它總是打破。這不是預期的。 –

回答

1

不能使用/畝的char * /畝是空終止的Unicode字符串不是ASCII字符串使用ASCII字符串/MA

我假設你有描述性的參數名而不是像d 這樣的論據,這明顯會與0xd aka 0n13
是一個數字,字符串還是符號?

會有什麼POI(d)決心,你的情況是POI(0×13)這顯然是一個壞的去全球化志願服務青年
局部符號不合邏輯命名d?

也當您使用別名的時候你應該總是他們的東西在腳本文件並執行 腳本文件上的每個打破

這裏是一個腳本文件的例子打破 別名不解釋

as /ma ${/v:MyAlias} poi(k) 
.block { 
    r $t0 = $spat("${MyAlias}" , "tiger") 
    .printf "%x\t${MyAlias}\n" , @$t0 
    .if(@$t0 != 1) {gc} 
} 

這裏是此在調試模式下運行comipled與優化在釋放模式編譯器關閉
將是足夠聰明,內聯代碼的printf()調用

#include <stdio.h> 
#include <stdlib.h> //msvc _countof 
void func(char* h,char* i,char* j,char* k) { 
    printf("%s %s %s %s\n" ,h,i,j,k); 
    return; 
} 
int main(void) { 
    char* foo[] = {"goat","dog","sheep","cat","lion","tiger",0,"vampire"}; 
    for(int x=0;x<_countof(foo);x++) { 
     func("this" , "is" , "a" , foo[x]); 
    } 
    return 0;  
} 

使用

的WinDbg APP.EXE

設置斷點和運行
記住這個或任何腳本,使用別名將失敗
之前焦炭評估無效項*吸血鬼
如果你想打破「吸血鬼」你可能需要即興而不使用別名

0:000> bl 
0:000> bp strbp!func "$$>a< strbpcond.txt" 
0:000> bl 
0 e 00171260  0001 (0001) 0:**** strbp!func "$$>a< strbpcond.txt" 
0:000> g 
ModLoad: 72670000 72673000 C:\Windows\system32\api-ms-win-core-synch-l1-2-0.DLL 
0 goat 
0 dog 
0 sheep 
0 cat 
0 lion 
1 tiger 
eax=00000005 ebx=7ffd7000 ecx=00000005 edx=001ac1e0 esi=001b6678 edi=001b667c 
eip=00171260 esp=002bfa54 ebp=002bfa90 iopl=0   nv up ei ng nz ac po cy 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000293 
strbp!func: 
00171260 55    push ebp 
0:000> dv 
       h = 0x001ac1f8 "this" 
       i = 0x001ac1f4 "is" 
       j = 0x001ac1f0 "a" 
       k = 0x001ac1e0 "tiger" 
+0

謝謝blabb!儘管我在遵循步驟時遇到了一些問題,但我的答案中有一些提示。 「$$> a

+0

最後,我得到了這份工作!非常感謝!我需要將腳本文件放置在windbg的文件夾中。 –

+0

沒有這不是你可以把它放在任何文件夾中的要求rtfm有點皺眉在這裏,所以我不會建議它,但將不得不請求你閱讀神奇,神話般,罰款,被遺棄...... ....,手動,也許評論什麼是預期的 – blabb