我想在第4个参数的值等于" abc"时设置条件断点。
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 :(得分:1)
你不能在 char * 上使用 / mu / mu用于 null终止的unicode字符串而不是 ascii string ascii string use / ma
我假设您有描述性参数名称,而不是像 d 这样的参数 这显然会与 0xd又名0n13 发生冲突 是数字,字符串或符号??
poi(d)在你的情况下解决的是 poi(0x13),这显然是一个糟糕的拒绝 或本地符号错误地命名为d ??
中断时不会解释别名 使用别名时,您应该始终将它们填充到脚本文件中并执行 每次休息时的脚本文件
这是一个脚本文件的示例
window.tables.children(matching: .tableRow).element(boundBy: 0).children(matching: .cell).element(boundBy: 5).click()
这里是在调试模式下进行操作的代码,其中优化已关闭 在发布模式下,编译器将足够聪明,可以内联printf()调用
as /ma ${/v:MyAlias} poi(k)
.block {
r $t0 = $spat("${MyAlias}" , "tiger")
.printf "%x\t${MyAlias}\n" , @$t0
.if(@$t0 != 1) {gc}
}
用法
windbg app.exe
设置休息并运行
请记住,这个或任何使用别名的脚本都会失败
在 char * vampire 之前评估空条目
如果你想打破"吸血鬼" ,你可能需要即兴创作而不使用别名
#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;
}