Windows WinDbg中的Python-Clik模块

Windows WinDbg中的Python-Clik模块,windows,windbg,pykd,Windows,Windbg,Pykd,我已经使用这个模块有一段时间了,我觉得它很棒。但是,我在WinDbg python插件中使用它时遇到了一些问题 我正在使用以下脚本,它在Linux中运行良好: import click @click.group() def shell(): pass @shell.command() @click.option('--name', help='Your name please') def hello(name): click.echo(name) if __name__ =

我已经使用这个模块有一段时间了,我觉得它很棒。但是,我在WinDbg python插件中使用它时遇到了一些问题

我正在使用以下脚本,它在Linux中运行良好:

import click

@click.group()
def shell():
    pass

@shell.command()
@click.option('--name', help='Your name please')
def hello(name):
    click.echo(name)

if __name__ == "__main__":
    shell()
下面可以看到脚本的成功调用(在Linux命令行中):

下面可以看到脚本调用失败(这在WinDbg插件中):

了解为什么会发生这种情况以及WinDbg插件不接受参数以便通过单击正确解析参数的原因。

这是单击“功能”:

请参见单击\utils.py:

if PY2 and WIN and _initial_argv_hash == _hash_py_argv():
    return _get_windows_argv() 
return sys.argv[1:]

def _get_windows_argv():
    argc = c_int(0)
    argv_unicode = CommandLineToArgvW(GetCommandLineW(), byref(argc)) 
因此,单击获取参数不是从sys.args,而是从windbg real命令行

您可以轻松解决此问题:

if __name__ == "__main__":
    import sys
    shell(args=sys.argv[1:])

PyKd。你能检查一下是否有效吗?Python中的注释/装饰语法何时可用?这可能是Python 2/3版本的问题吗?我使用karmadbg调试您的脚本,大约需要5分钟,请欣赏:)
if PY2 and WIN and _initial_argv_hash == _hash_py_argv():
    return _get_windows_argv() 
return sys.argv[1:]

def _get_windows_argv():
    argc = c_int(0)
    argv_unicode = CommandLineToArgvW(GetCommandLineW(), byref(argc)) 
if __name__ == "__main__":
    import sys
    shell(args=sys.argv[1:])