#1265·tracy

请考虑为源位置函数/文件字符串使用非空终止字符串。

作者: bmqn创建于 2026年1月25日更新于 2026年8月15日

我要将“TracyFunction”重新定义为类似QQPRETTY FCORSION},这样我就可以在函数名中加入C++命名空间和类. 为了有用,我还想从这个字符串中去掉返回类型和参数。 这可以使用"costexpr"函数,但特蕾西目前假设为已失效的字符串,因此我们仅限于从左侧剥去.

示例

翻译: // 客户端代码

缩写 Char * My pretty Function( 缩写 Char* 漂亮) { std: string view s( pretty) ; (中文(简体) ). 自动启动 = s. find ("); ++ 启动; 自动端 = s. find (' (', start); 如果( 结尾为: string view::: npos) 结束为: s. s. sign (); std:: string view r = s.substr (开始,结束 - 开始); 返回r.data(); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

define TracyFunction My pretty Function ( PRETTY FONUTION ) (英语).


C++ 方法在使用 QQPRETTY FCORSION 时可能作为 “ int foo: bar( int, int) ” 出现, 但是在使用已终止字符串时, 我们只能将其剥去为 ` foo: bar( int, int)' 。 在剖析器中查看时,名称相当动词化,并且指定一个明确的名称对于大型代码库可能不可行.

为了解决这个问题,我们可以使用指针+长度来编码字符串. 这将使客户端代码能够准确定义字符串的哪一部分应该显示,而不受无效终止的限制.

示例

翻译:
//特蕾西·普罗菲勒.hpp

构建字符串数据
{
(c) 控制器;
大小 t len; (中文(简体) ).
* ;

构建源代码数据
{
c. 名称;
字符串数据函数;
字符串数据文件;
uint32 t 线; 双向
颜色;
* ;

新默认值 :

翻译: ///特蕾西.hpp (英语).

#ifndef 崔西行动

定义 TracyFunction trace:: StringData{ FCORION , 0} 定义 :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

ifndef 崔西费

定义 TracyFile 轨迹 :: StringData{ FILE , 0}

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


`0'的长度保留了现有的无效行为。 在客户代码中,我们可自由指定“TracyFunction”和“TracyFile”的长度:

翻译:
// 客户端代码

# 包括 < 客户/ TracyProfiler.hpp>

曲棍球:StringData My pretty Function(Cont Char* pretty) 曲棍球 曲棍球 :
{
std: string view s( pretty) ; (中文(简体) ).
自动启动 = s. find (");
++ 启动;
自动端 = s. find (' (', start);
如果( 结尾为: string view::: npos) 结束为: s. s. sign ();
std:: string view r = s.substr (开始,结束 - 开始);
轨迹: StringData d;
d. ptr = r.data ();
d.len=r.size ();
返回 d 时;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

# define TracyFunction My pretty Function (  PRETTY FONUTION ) (英语).

我在当地执行过这个计划,但希望首先讨论这种改革的可行性。 改变服务器和客户端所使用的内部类型会打破现有的配置数据. 然而,这种做法只能做到客户方。 客户端维持一个将指向大小的缓存. 服务器继续使用指针作为密钥请求字符串,客户端使用本地已知的长度只返回所期望的子字符串,这避免了任何服务器的更改.