Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有办法显示WinDBG中可执行文件调用的所有函数(不仅仅是调用堆栈)?_C_Windows_Windbg - Fatal编程技术网

C 有没有办法显示WinDBG中可执行文件调用的所有函数(不仅仅是调用堆栈)?

C 有没有办法显示WinDBG中可执行文件调用的所有函数(不仅仅是调用堆栈)?,c,windows,windbg,C,Windows,Windbg,我正在尝试使用WinDbg调试一个不能正常工作的可执行文件(没有收到分段错误,它只是不做他应该做的事情)。我希望看到一个调用堆栈,其中包含运行可执行文件时调用的所有函数。这在WinDbg或任何其他调试器中都是可能的吗?是,正如我评论的那样,使用wt(监视和跟踪) 它可以通过多种方式进行配置 只喜欢一级通话 仅限N级呼叫 仅在特定模块中 仅在主模块等中 下面是ntdll中跨越um km边界的函数的简单跟踪 0:000> u . l1 ntdll!LdrpInitializeProcess+0

我正在尝试使用WinDbg调试一个不能正常工作的可执行文件(没有收到分段错误,它只是不做他应该做的事情)。我希望看到一个调用堆栈,其中包含运行可执行文件时调用的所有函数。这在WinDbg或任何其他调试器中都是可能的吗?

是,正如我评论的那样,使用wt(监视和跟踪)
它可以通过多种方式进行配置
只喜欢一级通话
仅限N级呼叫
仅在特定模块中
仅在主模块等中

下面是ntdll中跨越um km边界的函数的简单跟踪

0:000> u . l1
ntdll!LdrpInitializeProcess+0x11bf:
76ff6113 e870fffdff      call    ntdll!NtQueryInformationProcess (76fd6088)

0:000> bp .+5  //set a bp on return address
0:000> bl
 0 e 76ff6118     0001 (0001)  0:**** ntdll!LdrpInitializeProcess+0x11c4

0:000> wt
    2     0 [  0] ntdll!NtQueryInformationProcess
   27     0 [  0] aswhook
    1     0 [  1]   aswhook
   28     1 [  0] aswhook
    1     0 [  1]   0x6efc0480
    1     0 [  1]   0x6efc0485
    2     0 [  1]   ntdll!NtQueryInformationProcess
    2     0 [  2]     ntdll!KiFastSystemCall
    1     0 [  1]   ntdll!NtQueryInformationProcess
   46     8 [  0] aswhook
    3     0 [  1]   aswhook

Breakpoint 0 hit
eax=00000000 ebx=7ffdf000 ecx=e8cb8789 edx=ffffffff esi=ffffffff edi=00000000
eip=76ff6118 esp=0018f59c ebp=0018f6f4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!LdrpInitializeProcess+0x11c4:
76ff6118 85c0            test    eax,eax
0:000>
是,正如我所评论的,使用wt(监视和跟踪)
它可以通过多种方式进行配置
只喜欢一级通话
仅限N级呼叫
仅在特定模块中
仅在主模块等中

下面是ntdll中跨越um km边界的函数的简单跟踪

0:000> u . l1
ntdll!LdrpInitializeProcess+0x11bf:
76ff6113 e870fffdff      call    ntdll!NtQueryInformationProcess (76fd6088)

0:000> bp .+5  //set a bp on return address
0:000> bl
 0 e 76ff6118     0001 (0001)  0:**** ntdll!LdrpInitializeProcess+0x11c4

0:000> wt
    2     0 [  0] ntdll!NtQueryInformationProcess
   27     0 [  0] aswhook
    1     0 [  1]   aswhook
   28     1 [  0] aswhook
    1     0 [  1]   0x6efc0480
    1     0 [  1]   0x6efc0485
    2     0 [  1]   ntdll!NtQueryInformationProcess
    2     0 [  2]     ntdll!KiFastSystemCall
    1     0 [  1]   ntdll!NtQueryInformationProcess
   46     8 [  0] aswhook
    3     0 [  1]   aswhook

Breakpoint 0 hit
eax=00000000 ebx=7ffdf000 ecx=e8cb8789 edx=ffffffff esi=ffffffff edi=00000000
eip=76ff6118 esp=0018f59c ebp=0018f6f4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!LdrpInitializeProcess+0x11c4:
76ff6118 85c0            test    eax,eax
0:000>

调用的所有函数是什么?程序执行的所有函数您可以查看
wt
以开始跟踪您的调用。请注意,只有在可以解析符号时才能得到函数名,否则只能得到地址。您可以查看
tc
来转储特定数量的呼叫。这不是一个完全无用的运动。我过去曾使用它在返回地址上设置断点,并使用wt或watch and trace。它可以为您提供非常详细的调用流摘要即使RbMm最终可能是正确的,我想每个开发人员都希望这样做——我认为这是合法的。如利文所说,使用wt。但是-也许可以帮你自己一个忙,先用calc.exe这样的简单应用程序试试。如果从初始断点开始执行此操作,您会注意到启动需要约20分钟,而不是毫秒。调用的所有函数是什么?程序执行的所有函数您可以查看
wt
以开始跟踪调用。请注意,只有在可以解析符号时才能得到函数名,否则只能得到地址。您可以查看
tc
来转储特定数量的呼叫。这不是一个完全无用的运动。我过去曾使用它在返回地址上设置断点,并使用wt或watch and trace。它可以为您提供非常详细的调用流摘要即使RbMm最终可能是正确的,我想每个开发人员都希望这样做——我认为这是合法的。如利文所说,使用wt。但是-也许可以帮你自己一个忙,先用calc.exe这样的简单应用程序试试。如果从初始断点开始执行此操作,您会注意到启动需要约20分钟,而不是毫秒