我目前正在开发一个C#应用程序,它已经拥有了自己的日志记录。抛出异常时,异常将保存到列表中,用户可以通过列表视图查看该列表。 当用户在列表视图中单击异常时,异常的堆栈跟踪将显示在文本框中。但即使我在远程计算机上执行程序,堆栈跟踪也会显示从编译应用程序的计算机到原始源文件的文件路径。
e.g:
at C:\Folder1\Folder2\Class1.cs:81
at C:\Folder1\Folder2\Class2.cs:65
at C:\Folder1\Folder1\Class3.cs:21
只显示没有文件夹的源文件会很好......
如何更改此行为?
有原生解决方案吗?或者我只需要做一些字符串操作?
答案 0 :(得分:21)
您可能拥有已安装应用的.pdb文件。如果没有.pdb文件,则不应显示文件位置。
查看Getting line numbers in exception stack trace in a Windows Service
和include line numbers in stack trace without pdb?
你不能用线获得堆栈跟踪 数字直接来自您的申请 除非你捆绑了PDB。
答案 1 :(得分:7)
文件路径包含在“program database”文件(.pdb)中。这些文件是在编译期间创建的,这些文件中的路径与编译机器上的路径相同。
您可以从安装中删除.pdb文件,但这样您的堆栈跟踪将只是现在的一半,因为它不会告诉您发生错误的行。通常,您不会在附加了Pdb文件的生产环境中运行代码。
如果你想保留“有趣的堆栈跟踪”,你可以考虑在调用exceptionObject.toString()
之后对文件夹名称进行字符串替换。