从PyRFC获取错误的堆栈跟踪

时间:2018-12-03 14:23:32

标签: sap abap sentry pyrfc

到目前为止,如果我的SAP函数内部出现错误,我只会收到一条错误消息。

我通过PyRFC调用此函数。

这里是一个例子:

pyrfc._exception.ABAPRuntimeError: RFC_ABAP_MESSAGE (rc=4): key=No authorization, 
message=No authorization [MSG: class=00, type=E, number=001, v1-4:=No authorization;;;]

如果我能获得sap / abap的堆栈跟踪信息,它将大大提高开发速度。

有没有办法像在Python中那样获取堆栈跟踪?

我有权访问ABAP代码并可以对其进行修改。

在st22中,我可以看到更多有价值的信息。

要实现梦想,将是一个像哨兵/ Django这样的页面:

stacktrace-including-local-variables

(包括局部变量的Stacktrace)

相关:https://softwarerecs.stackexchange.com/questions/52350/sentry-event-from-exception-to-html

Sentry使用特定的JSON表示堆栈跟踪和局部变量的内容。上面的链接包含一个示例。

2 个答案:

答案 0 :(得分:1)

ABAP内的堆栈跟踪可以称为 使用cl_abap_get_call_stack类。 局部变量不包括在类cl_abap_get_call_stack返回的堆栈跟踪中。 但是您可以使用一个日志点来监视局部变量和堆栈跟踪。可以在事务saab中创建,更改和查看日志点。 示例代码段:

DATA(formatted_stack) =  
cl_abap_get_call_stack=>format_call_stack_with_struct(   
  cl_abap_get_call_stack=>get_call_stack( ) ).
LOG-POINT ID my_log_point FIELDS formatted_stack 
  local_variable1 local_variable2.

对于授权错误,请检查事务su53。 当您看到红色的授权对象S_RFC时,表示不允许您以任何方式调用功能模块!

答案 1 :(得分:1)

ABAP 753版本引入了EPP-扩展护照等结构。

似乎正在做您想要的事情,即显示被调用系统的踪迹。我之所以说“似乎是”,是因为我手上没有753+系统,因此我无法进行实际检查。

From the description它应该执行您想要的操作:

扩展护照(EPP)是一种可以从客户端发送到服务器的数据结构,用于分析呼叫堆栈

扩展的Passport可由框架和分析工具用来跟踪超出系统边界的客户端和服务器之间的通信中的外部呼叫堆栈。 EPP组件的值可以保存到日志文件中并用于监视。其中一个例子是短转储,它们都显示了最重要的EPP组件。

DEMO_EPP提供了以下EPP使用模式:

cl_demo_epp=>init( ).

"this program
cl_demo_epp=>append( ).

"Calling RFC to remote instance
CALL FUNCTION 'DEMO_RFM_EPP_1' DESTINATION instance.

"New SAP LUW
CALL FUNCTION 'DEMO_UPDATE_DELETE' IN UPDATE TASK
  EXPORTING
    values = VALUE demo_update_tab( ).
COMMIT WORK.

cl_demo_epp=>append( ).

cl_demo_output=>new(
  )->begin_section( `Extended Passport (EPP)`
  )->display( name = 'EPP Trace'
              data = cl_demo_epp=>get( ) ).