关于获取异常处理的调用堆栈,有很多帖子,我们有EurekaLog来处理它,但我真的希望能够在运行时的任何时候获取堆栈,就像你放的那样IDE中的断点。
遗留代码中某处的事件导致执行的功能正在执行它不应该执行的操作。虽然我们可以从调试输出中看到函数的名称,但我们无法在没有堆栈跟踪的情况下告诉实际调用它的内容。这不是一个例外,我们不想在该函数中引发异常,因此EurekaLog可以触发。
有没有办法获得调用堆栈而没有任何异常?
答案 0 :(得分:7)
您无需引发异常即可获得堆栈跟踪。调用EurekaLog的GetTracer()
函数来获取TEurekaBaseStackList
对象,然后调用其Build()
方法来获取堆栈跟踪。以下是EurekaLog的文档中提供的示例:
var gems = $("#gems"),
initialValue = 0;
var valMap = [0, 6500, 14000, 28000, 50000];
var updateSliderValue = function(e, ui) {
var slider = $(this).data().slider;
slider.element.find(".ui-slider-handle").text(valMap[ui.value]);
};
console.log(valMap.length);
gems.slider({
min: 1,
max: (valMap.length - 1),
slide: updateSliderValue,
create: updateSliderValue,
value: 6500
});
答案 1 :(得分:0)
来自help:使用GetCurrentCallStack
单位中的ECallStack
功能:
uses
ECallStack; // for TEurekaBaseStackList and GetCurrentCallStack
procedure TForm1.Button1Click(Sender: TObject);
var
CallStack: TEurekaBaseStackList;
begin
CallStack := GetCurrentCallStack;
// You can also use other functions from ECallStack unit
try
Memo1.Lines.Assign(CallStack);
// You can also use:
// CallStack.ToString - to convert call stack to String
// CallStackToString(s) routines to customize textual formatting
finally
FreeAndNil(CallStack);
end;
end;
P.S。您可能还需要考虑使用EurekaLog's logging routines。