gpt4 book ai didi

c# - 已加载私有(private)符号但未显示行号?

转载 作者:行者123 更新时间:2023-11-30 15:12:11 25 4
gpt4 key购买 nike

我正在使用 Windbg 从托管代码(C#,为任何 CPU 构建的控制台应用程序)加载故障转储,故障转储是在 x64 平台上创建的。我在 x64 平台上调试。

我使用以下命令加载我的应用程序的私有(private)符号。以下是我在 Windbg 中使用的命令。

(set symbol path and copy FooService.pdb pdb file to local symbol path D:\Debug)

0:016> .reload /f
.*** WARNING: Unable to verify checksum for FooService.exe
DBGHELP: FooService.pdb- private symbols & lines
D:\Debug\FooService.pdb

0:016> lm
start end module name
00000000`00400000 00000000`0041c000 FooService C (private pdb symbols) D:\Debug\FooService.pdb

我的困惑是,当使用以下命令时,堆栈跟踪中没有显示行号信息。任何想法出了什么问题?我需要设置源路径吗?

0:016> ~6 e!clrstack

编辑 1:我在使用 !pe 和 !U 查找抛出异常的堆栈跟踪时遇到了一些问题。

这是我的调试过程。起初我使用 !pe 来打印异常对象的堆栈跟踪,当我使用 !U 来分解代码时。我发现的问题是 !U 将分解 FooService.ProcessOrders() 的所有函数代码,我想找到函数 FooService.ProcessOrders 中发生崩溃的确切位置。我还发现反汇编的带注释的 IL 代码仅包含我进行的函数调用(对于非函数调用 C# 代码,例如 a=a*2,仅显示汇编语言),而不是完全映射到每一行 C# 代码的 IL,( 1)这是正确的预期行为吗? (2) 从我在这里发布的分析中找到确切失败的 C# 代码的解决方案或进一步建议是什么?

!pe 0000064280155325

StackTrace (generated):
SP IP Function

000000001A56DA70 00000642B74E3B7A System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Data.Common.DbAsyncResult, System.String, Boolean)
000000001A56DB10 00000642B74E3FCC System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
000000001A56DB90 0000064280155325 FooService.ProcessOrders()
000000001A56F3E0 0000064280153A21 FooService.RountineJob()

!U 0000064280155325

提前致谢,乔治

最佳答案

WinDbg/SOS 不会将行号映射到 !clrstack 的输出。因此,只要 lm 告诉您您拥有自己的程序集的私有(private) pdb 符号,您的设置就是正确的。不幸的是,当前版本的 WinDbg/SOS 不支持与 native 代码相同的源代码级调试。

编辑:关于异常(exception)情况。当您执行 !pe 时,它会告诉您调用堆栈以及相关方法的偏移量。如果您从 !pe 输出的 IP 列中获取地址并对其执行 !U,您将看到相关方法的 JITTED 代码。 IP 列将是生成异常的代码的最后一个地址(因此您必须进行一些计数才能找到正确的指令)。

反汇编输出使用 .NET 调用进行注释,因此不难将其映射到 IL 或源代码。这应该可以帮助您准确确定要查找的 throw 语句。

话虽这么说,但如果将方法拆分为许多较小的方法,调试起来就会容易得多。如果这样做,方法名称通常足以查明异常的位置。我意识到这并不总是一种选择,但值得考虑。

关于c# - 已加载私有(private)符号但未显示行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com