这特别是关于在 edge.js 下运行 c# 时获取堆栈跟踪中的行号。
鉴于此 C# 源文件 (test.cs)
using System;
using System.Threading.Tasks;
namespace test {
public class Startup {
public async Task<object> Invoke(dynamic input) {
try {
throw new Exception("some error");
} catch(Exception e) {
Console.WriteLine(e);
}
return null;
}
}
}
我正在使用以下命令构建一个 .dll(和 .dll.mdb):
mcs -debug -target:library -out:test.dll test.cs
并使用此 edge.js 脚本运行:
var edge = require('edge');
var myfunc = edge.func({
assemblyFile: __dirname + '/test.dll'
});
myfunc(true, function(err, result) { });
输出中的堆栈跟踪没有文件名或行号:
System.Exception: some error
at test.Startup+<Invoke>c__async0.MoveNext () [0x00000] in <filename unknown>:0
有没有办法在堆栈跟踪中获取文件名和行号而不是 <filename unknown>:0 ?
在命令行中,mono 必须使用 --debug 参数运行才能获取行号。如果这里是这种情况,那么这个问题可能归结为“我如何将参数从 edge.js 传递给 CLR?”
版本:node.js:v0.10.39、mcs/mono:4.0.4.0、edge.js:4.0.0
[编辑] 我发现你可以通过设置环境变量 MONO_ENV_OPTIONS 从边缘获取命令行参数。不幸的是,这不适用于 --debug。