![]() |
1
10
我们正在做一些类似的事情,并且只依赖于一个惯例:将
康斯特
|
![]() |
2
8
我认为这是这个问题的副本: How to get current method's name in Delphi 7? 答案是要这样做,您需要在项目中使用某种形式的调试信息,并使用 JCL 函数从中提取信息。 我会补充说,我在D2009/2010中没有使用过新的RTTI支持,但是如果你能用它做些聪明的事情,我也不会感到惊讶。例如,这将向您展示如何 list all methods of a class ,并且每个方法都由 TRttiMethod . 从trttinamedobject派生,它具有 Name property which "specifies the name of the reflected entity" . 我相信一定有一种方法可以获得当前所在位置的引用,即您当前所在的方法。这都是猜测,但试着试试看! |
![]() |
3
2
没有编译时宏,但是如果包含足够的调试信息,则可以使用调用堆栈来查找它。见 this same question . |
![]() |
4
2
实现这种效果的另一种方法是将源元数据输入到一个特殊的注释中,比如
然后在预编译构建事件中对源代码运行第三方工具,以在此类注释中查找带有“local_function_name”的行,并用出现此类代码的方法名称替换所有字符串文本,以便代码成为
如果代码行在“someproc3”方法中。例如,用Python编写这样的工具一点也不困难,用Delphi完成的文本替换也很容易。 自动完成替换意味着您不必担心同步。例如,您可以使用重构工具来更改方法名,然后字符串文本将在下一个编译器过程中自动更新。 类似于自定义源预处理器。 我给出了这个问题A+1,这是我以前多次遇到的情况,特别是对于断言失败的消息。我知道堆栈跟踪包含数据,但是断言消息中包含例程名称会使事情变得简单一点,正如OP指出的那样,手工操作会造成过时消息的危险。
编辑
:
|
![]() |
5
0
我通过设计解决了类似的问题。你的例子让我困惑,因为你似乎已经在做这个了。 将验证函数包装一次,如下所示:
然后,不要重复呼叫:
你呼叫:
如果你有错别字,编译器会捕捉到它:
如果为包装函数(如“validatename”)使用一个更有意义的名称,代码也会变得更可读。 |
![]() |
6
0
我认为你这样做是错误的: 首先,检查是否有错误,然后(即:您需要调用方的名称)使用一些工具(如jclebug)通过将返回地址从堆栈传递给调用方来获取调用方的名称。 获取过程名是非常昂贵的性能方面的,因此您只想在绝对必要的时候进行。 |
![]() |
TechGeek · 如何在文本文件中逐行打印数组的内容? 2 年前 |
|
Parkavi · 在plsql developer中执行过程 6 年前 |
|
Zunain Ahmad · 程序从其他表中插入值[关闭] 7 年前 |
![]() |
Sreejith · 存储过程中关键字else附近的语法不正确 7 年前 |