我知道在WinDBG中使用bp设置基于函数名的断点,bm命令有没有办法在源代码行号上设置断点中断
说
<some command> 20
Run Code Online (Sandbox Code Playgroud)
意味着它应该在第20行设置断点
提前致谢
我从http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx 包下载了符号(Windows 7 RTM x86零售符号,所有语言),但它仍然给我同样的错误!
完成.发布但仍然没有工作
.sympath C:\ inetpub\wwwroot\ProductsService\bin\ProductsEntityModel.pdb; srv c:\ Symbols http://msdl.microsoft.com/download/symbols
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
CommandLine: c:\windows\system32\inetsrv\w3wp.exe -ap "DefaultAppPool" -v "v4.0" -l "webengine4.dll" -a \\.\pipe\iisipm6cb8674b-5fd5-4b1c-aac4-cd0d8af98602 -h "C:\inetpub\temp\apppools\DefaultAppPool.config" -w "" -m 0 -t 20
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. * …
Run Code Online (Sandbox Code Playgroud) 我需要变量的大小,我想从Windbg命令行获取该值.编译代码并添加C++ sizeof()只是为了获得该值是困难和无用的.
从文档中我看到Windbg可以在值之后进行过滤dt /s
.但是显示那个价值?
精简版
我想要一个ADPlus脚本,它将在第一次机会StackOverflowException上执行完全内存转储,然后清除任何内容,并忽略所有其他异常类型.
日志版本
在发布新的ASP.NET代码之后,我们开始获得间歇性的StackOverflowExceptions.我们已经寻找无限递归和自上次已知良好安装以来添加的修订版中的所有常见嫌疑人,并且找不到任何内容.该网站将运行长达一个小时,然后崩溃.
我们使用了WinDbg和SOS,并尝试使用ADPlus获取崩溃日志,使用以下命令:
adplus -crash -o D:\Crash -NoDumpOnFirst -iis
Run Code Online (Sandbox Code Playgroud)
-NoDumpOnFirst的原因是我们只能在繁忙的服务器上重现生产中的这个错误.为了对每个第一次机会异常执行minidump(嘿,它发生),调试器必须暂停IIS工作进程足够长时间写出一个16兆字节的文件,因此请求排队并且应用程序变得不稳定.因为这个错误可能需要长达一个小时才能让它变得难看,这是有问题的.
所以使用-NoDumpOnFirst,我得到一个转储文件,WinDbg输出这些线程:
PDB symbol for mscorwks.dll not loaded
ThreadCount: 69
UnstartedThread: 0
BackgroundThread: 69
PendingThread: 0
DeadThread: 0
Hosted Runtime: no
PreEmptive GC Alloc Lock
ID OSID ThreadOBJ State GC Context Domain Count APT Exception
XXXX 1 c6c 000fa758 11808221 Disabled 3b49ee4c:3b49efe8 00120888 1 Ukn (Threadpool Worker)
XXXX 2 1294 000fd258 b220 Enabled 00000000:00000000 000df4e0 0 Ukn (Finalizer)
XXXX 3 1eb0 0011cdd0 80a220 Enabled 00000000:00000000 000df4e0 0 Ukn (Threadpool …
Run Code Online (Sandbox Code Playgroud) 最近我们的应用遇到了一个奇怪的问
应用程序在WPF窗口中有一个win32窗口,当调整WPF窗口大小时,问题就出现了.
堆栈跟踪:
Exception object: 0000000002ab2c78
Exception type: System.OutOfMemoryException
InnerException: <none>
StackTrace (generated):
SP IP Function
0048D94C 689FB82F PresentationCore_ni!System.Windows.Media.Composition.DUCE+Channel.SyncFlush()+0x80323f
0048D98C 681FEE37 PresentationCore_ni!System.Windows.Media.Composition.DUCE+CompositionTarget.UpdateWindowSettings(ResourceHandle, RECT, System.Windows.Media.Color, Single, System.Windows.Media.Composition.MILWindowLayerType, System.Windows.Media.Composition.MILTransparencyFlags, Boolean, Boolean, Boolean, Int32, Channel)+0x127
0048DA38 681FEAD1 PresentationCore_ni!System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean, System.Nullable`1<ChannelSet>)+0x301
0048DBC8 6820718F PresentationCore_ni!System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean)+0x2f
0048DBDC 68207085 PresentationCore_ni!System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr)+0x185
0048DC34 681FFE9F PresentationCore_ni!System.Windows.Interop.HwndTarget.HandleMessage(Int32, IntPtr, IntPtr)+0xff
0048DC64 681FD0BA PresentationCore_ni!System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)+0x3a
0048DC88 68C6668E WindowsBase_ni!MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)+0xbe
0048DCD4 68C665BA WindowsBase_ni!MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)+0x7a
0048DCE4 68C664AA WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Boolean)+0x8a
0048DD08 68C6639A WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Boolean, System.Delegate)+0x4a
0048DD50 68C64504 …
Run Code Online (Sandbox Code Playgroud) 我试图了解32位和64位处理器之间的对象大小差异.假设我有一个简单的课程
class MyClass
{
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
所以在32位机器上,整数是4个字节.如果我将Syncblock添加到其中(另外4个字节),则对象大小将为12个字节.为什么显示16个字节?
0:000> !do 0x029d8b98 Name: ConsoleApplication1.Program+MyClass MethodTable: 000e33b0 EEClass: 000e149c Size: 16(0x10) bytes (C:\MyTemp\ConsoleApplication1\ConsoleApplication1\bin\x86\Debug\ConsoleApplication1.exe) Fields: MT Field Offset Type VT Attr Value Name 71972d70 4000003 4 System.Int32 1 instance 0 x 71972d70 4000004 8 System.Int32 1 instance 0 y
在64位机器上,一个整数仍然是4个字节,唯一改变的是Syncblock将是8个字节(因为指针是64位机器上的8个字节).这意味着对象大小将是16个字节.为什么显示24个字节?
0:000> !do 0x00000000028f3c90 Name: ConsoleApplication1.Program+MyClass MethodTable: 000007ff00043af8 EEClass: 000007ff00182408 Size: 24(0x18) bytes (C:\MyTemp\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe) Fields: MT Field Offset Type VT Attr Value Name 000007fef4edd998 4000003 8 System.Int32 1 instance 0 x 000007fef4edd998 …
我有一个来自生产服务器的崩溃转储,显示OutOfMemoryException.例外本身与此无关.
我碰巧运行了一个!dso来查看堆栈对象:
0:042> !dso
OS Thread Id: 0x1014 (42)
ESP/REG Object Name
246eeb24 109a21bc System.UnhandledExceptionEventHandler
246eeb2c 39083998 System.Runtime.Remoting.Proxies.__TransparentProxy
246eeb34 39083b5c System.UnhandledExceptionEventArgs
246eeb48 39073280 System.Byte[]
246eec10 2e720050 System.OutOfMemoryException
[snip]
246ef250 0ac1c4d0 System.IO.MemoryStream <-- interesting
Run Code Online (Sandbox Code Playgroud)
我以为MemoryStream可能与错误有关,所以我把它丢弃了:
0:042> !do 0ac1c4d0
Name: System.IO.MemoryStream
MethodTable: 7932d5e4
EEClass: 790ec318
Size: 52(0x34) bytes
(C:\WINDOWS\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
7933061c 400018a 4 System.Object 0 instance 00000000 __identity
7992cbcc 4001b6c 8 ...ream+ReadDelegate 0 instance 00000000 _readDelegate
7992cc58 4001b6d c ...eam+WriteDelegate 0 instance 00000000 _writeDelegate …
Run Code Online (Sandbox Code Playgroud) 我开始学习windbg并找到了这篇好文章 如何使用WinDbg来分析VC++应用程序的崩溃转储?
现在我想按照说明一步一步地做.这是问题所在:我需要编写一些可以立即崩溃的示例代码,并创建一些可以由windbg使用的转储文件.
怎么写这样的代码?
void Example4()
{
int* i = NULL;
*i = 80;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会立即崩溃; 但是,我不知道在哪里可以找到转储文件?
谢谢
我正在调试一个模块,我只有.exe和没有私有符号的.pdb.
在调试会话期间,我需要检查内部结构.显然这个结构不会出现在PDB中,因为它是私有的 - 但幸运的是我有一个.h文件,其中定义了这个结构.因此,我可以构建一些使用此结构的虚拟模块,并获取包含此结构的PDB文件.
现在我有一个带有struct符号的卸载模块,我想加载它的符号,以便为该结构转换一些内存.(当然没有卸载原始的.exe我正在调试)
问题:似乎WinDbg只允许为加载的模块加载符号......
我的问题是:有没有一种简单的方法可以从卸载的模块加载我的符号?
我试过.reload /i /f MyDll.dll
但我总是得到...MyDll.dll - unmatched
.
设置同情并没有帮助.
有任何想法吗?
使用windbg和running!dumpheap命令查看对象的地址时,如何限制特定数量的对象.我发现的唯一方法是在博客上使用CTRL + BREAK和命令行http://dotnetdebug.net/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system /
-l X - 仅打印每个堆中的X个项而不是所有对象.
显然-l不再存在于SOS.dll中