除了阅读GetFileName()
文件并从
GetFileLineNumber()
行之外
new StackTrace(exception).GetFrame(x)
有没有办法获得导致异常的实际代码行(作为字符串)?
由于
答案 0 :(得分:2)
我不这么认为。代码已编译,因此不再可用。 但是,如果您还拥有可用的源代码,则可能会有一些解决方法。
答案 1 :(得分:1)
不,就我所知,这是你唯一的选择。为了获得导致异常的原始代码行,必须使源可用。 StackFrame
已经使你能够获得行号(通过调试符号 - 在大多数情况下是PDB文件),这使得它很简单,我会说。
您建议的方法是否有任何特殊问题?
答案 2 :(得分:1)
没有可行的方法,因为行信息不存储在DLL文件中。将IL块映射到源代码行的信息存储在PDB文件中。您需要访问PDB才能获取异常的行信息。
如果PDB可用,StackFrame类上有足够的信息来获取适当的ISymUnmanagedMethod类。主要是你只需要方法标记和方法中的当前偏移量。这确实需要您了解PDB的内部结构,我不确定它是否记录在任何地方。
PDB API:http://msdn.microsoft.com/en-us/library/ms233503.aspx
答案 3 :(得分:1)
它会被编译,所以在运行时你只有IL。充其量,你可以获得IL并将其反编译回C#,就像反射器一样。
答案 4 :(得分:0)
发布moretem调试很困难,但并非不可能。您可以使用工具(例如here和here)以及techniques。
答案 5 :(得分:0)
您可以使用$query3 = "INSERT INTO inventory
(item_name, item_code, item_cat, supplier, item_location, quantity, init_price, buy_price, item_sold, date_now)
VALUES
(:item_name, concat(:item_name, :quantity), :item_cat, :supplier, :item_location, :quantity, :init_price, :buy_price, :item_sold, :date)";
块获取行:
try catch