25

我目前正在开发一个 C# 应用程序,它有自己的日志记录。当抛出异常时,异常被保存到一个列表中,用户可以通过列表视图查看该列表。当用户单击列表视图中的异常时,异常的堆栈跟踪将显示在文本框中。但即使我在远程机器上执行程序,堆栈跟踪也会显示从编译应用程序的机器到原始源文件的文件路径。

例如:

at C:\Folder1\Folder2\Class1.cs:81
at C:\Folder1\Folder2\Class2.cs:65
at C:\Folder1\Folder1\Class3.cs:21

只显示没有文件夹的源文件会很好......

我怎样才能改变这种行为?

有本地解决方案吗?还是我必须简单地进行一些字符串操作?

4

2 回答 2

23

您可能拥有已安装应用程序的 .pdb 文件。如果没有 .pdb 文件,则不应显示文件位置。

查看在Windows 服务中获取异常堆栈跟踪中的行号

在没有 pdb 的情况下在堆栈跟踪中包含行号?

除非捆绑 PDB,否则无法直接从应用程序获取带有行号的堆栈跟踪。

于 2010-01-26T12:19:38.550 回答
8

文件路径包含在“程序数据库”文件 (.pdb) 中。这些文件是在编译过程中创建的,这些文件中的路径与编译机器上的路径相同。

您可以从安装中删除 .pdb 文件,但这样您的堆栈跟踪将只有现在的一半有趣,因为它不会告诉您发生错误的行。通常,您不会在附加 Pdb 文件的生产环境中运行代码。

如果您想保留“有趣的堆栈跟踪”,您可以考虑在调用exceptionObject.toString().

于 2010-01-26T12:23:01.763 回答