wolfpld / tracy Goto Github PK
View Code? Open in Web Editor NEWFrame profiler
Home Page: https://tracy.nereid.pl/
License: Other
Frame profiler
Home Page: https://tracy.nereid.pl/
License: Other
Hey,
I am looking into integrating tracy into clausewitz, the engine used by all Paradox Development Studio games. It looks very useful, but I ran into the issue where defining a scoped zone multiple times in a function will cause issues.
I think this can be easily solved by adding the line number to the variable name, the source location already has that. Do you want me to make a pull request?
I’m using the C tracy API. As an experiment I called the first function I came across – ___tracy_alloc_srcloc
and the application immediately aborted. Attached is the stack-trace:
(gdb) bt
#0 0x000055555557fea3 in tracy::_memory_allocate_small (heap=0x0, size=32) at tracy/client/tracy_rpmalloc.cpp:1270
#1 0x0000555555580134 in tracy::_memory_allocate (heap=0x0, size=32) at tracy/client/tracy_rpmalloc.cpp:1343
#2 0x00005555555815af in tracy::rpmalloc (size=32) at tracy/client/tracy_rpmalloc.cpp:2135
#3 0x00005555555660a0 in tracy::tracy_malloc (size=32) at tracy/common/TracyAlloc.hpp:16
#4 0x000055555557ba51 in tracy::Profiler::AllocSourceLocation (function=0x55555561301f "test_fn", source=0x555555613013 "<no-source>", line=0) at tracy/client/TracyProfiler.hpp:489
#5 ___tracy_alloc_srcloc (line=0, source=0x555555613013 "<no-source>", function=0x55555561301f "test_fn") at tracy/client/TracyProfiler.cpp:3068
<snip>
#19 0x00007ffff7dccedd in start_thread () from /nix/store/jx19wa4xlh9n4324xdl9rjnykd19mmq3-glibc-2.30/lib/libpthread.so.0
#20 0x00007ffff7ce3a4f in clone () from /nix/store/jx19wa4xlh9n4324xdl9rjnykd19mmq3-glibc-2.30/lib/libc.so.6
TracyClient was built as such:
"g++" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-m64" "-Wall" "-Wextra" "-DTRACY_ENABLE" "-o" "out/tracy/TracyClient.o" "-c" "tracy/TracyClient.cpp
"ar" "crs" "out/libtracy-client.a" "out/tracy/TracyClient.o"
And then linked directly to the test executable that invokes this function from a thread. The thread is created by a test framework.
From spelunking the code base I found that the rpmalloc_thread_initialize
is set-up to be called through a TLS initializer – and indeed it is, at least for the main thread:
(gdb) br RPMallocInit::RPMallocInit()
Breakpoint 1 at 0x1e638: file tracy/client/TracyProfiler.cpp, line 143.
(gdb) run
Breakpoint 1, tracy::RPMallocInit::RPMallocInit (this=0x55555564da70 <tracy::s_rpmalloc_init>) at tracy/client/TracyProfiler.cpp:143
(gdb) bt
#0 tracy::RPMallocInit::RPMallocInit (this=0x55555564da70 <tracy::s_rpmalloc_init>) at tracy/client/TracyProfiler.cpp:143
#1 0x00005555555948b1 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=102) at tracy/client/TracyProfiler.cpp:987
#2 0x00005555555950c1 in _GLOBAL__sub_I.00102_TracyClient.cpp(void) () at tracy/libbacktrace/elf.cpp:3512
#3 0x0000555555612e85 in __libc_csu_init ()
#4 0x00007ffff7c0fd1a in __libc_start_main () from /nix/store/jx19wa4xlh9n4324xdl9rjnykd19mmq3-glibc-2.30/lib/libc.so.6
#5 0x000055555556556a in _start () at ../sysdeps/x86_64/start.S:120
However, it does not appear to be called again for the newly created threads. And that's why I ultimately encounter a crash.
The manual does not appear to indicate that the client library must be used in the main thread, or that there are any initialization routines for the user to call, or that it is necessary to specify certain defines (such as ENABLE_PRELOAD
) to use the client library in a multi-threaded program.
After building the profiler from source (master branch commit 11e1671), I get a crash at runtime, something to do with the X window system:
[nix-shell:~/Downloads/tracy/profiler/build/unix]$ ./Tracy-release
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 40 (X_TranslateCoords)
Resource id in failed request: 0x0
Serial number of failed request: 189
Current serial number in output stream: 189
[nix-shell:~/Downloads/tracy/profiler/build/unix]$ ./Tracy-debug
X Error of failed request: BadWindow (invalid Window parameter)
Major opcode of failed request: 40 (X_TranslateCoords)
Resource id in failed request: 0x0
Serial number of failed request: 189
Current serial number in output stream: 189
Please let me know if there is any other information I can provide to troubleshoot this.
Hello,
tracy crashes when a client attempts to connect:
Tracy-debug: ../../../common/TracySocket.cpp:116: bool tracy::Socket::Connect(const char*, int): Assertion `c == -1' failed.
fish: “./Tracy-debug” terminated by signal SIGABRT (Abort)
What I'm doing:
I'm running fedora 32 and using 25c7245
Hi,
First and foremost - I find this tool amazing! Thank you so much for putting effort into it!
I Was trying to use tracy with a library I wrote in c++ in iOS environment.
It all seemed to work great except for missing call stacks.
In #8 I saw that you mentioned that it makes no sense to catch crashes on iOS as there are no symbols on the device.
I don't know about crashes (as I didn't test it yet) but for typical profiling I managed to workaround this issue by:
I've decided to share my findings here for my fellas iOS programmers and for you to consider adding these as side notes to the manual.
Tnx.
I'm importing trace data in Chrome format where most of the useful info is contained under args
key like this:
293 │ {
294 │ "ts": 1589232324367717,
295 │ "args": {
296 │ "args": "[\"--user\",\"--no-user-package-db\",\"--package-db\",\"/Users/ethercrow/.stack/snapshots/x86_64-osx/87e154bcf63658f29f1e89e07af68ff63
│ 963d64fc0e107f1e947001fc28f6600/8.6.5/pkgdb\",\"dump\",\"--expand-pkgroot\"]",
297 │ "process": "/Users/ethercrow/.stack/programs/x86_64-osx/ghc-8.6.5/bin/ghc-pkg-8.6.5"
298 │ },
299 │ "tid": 4,
300 │ "name": "sinkProcessStdout",
301 │ "pid": 1,
302 │ "ph": "B"
303 │ },
304 │ {
305 │ "ts": 1589232324470187,
306 │ "tid": 4,
307 │ "name": "sinkProcessStdout",
308 │ "pid": 1,
309 │ "ph": "E"
310 │ },
Unfortunately Tracy doesn't show this info:
and as far as I can see in import-chrome.cpp, doesn't read that field. tracy::Worker::ImportEventTimeline
doesn't appear to have a field where one could put this data.
I have encountered a situation where tracy fails on (bit old) x64 laptop because RDTSCP instruction is not available. It appears that we can not assume RDTSCP presence on x86-64 platforms.
In my newest test I am trying to run a test application with TRACY_NO_EXIT, however, running the application with sudo
seems to have no effect. The application is rather simple as you can see. I couldn't find anything in the manual mentioning this problem. So, is this an actual problem or expected behaviour?
#include <iostream>
#include <mutex>
#include <string>
#include <chrono>
#include "Tracy.hpp"
int SharedCounter = 0;
TracyLockableN(std::mutex, AccMutex, "Counter Mutex");
#define CALLSTACK_DEPTH 5
void threadFunc(int tid) {
tracy::SetThreadName(("Accumulator " + std::to_string(tid)).c_str());
ZoneScopedNS("Thread Func", CALLSTACK_DEPTH);
for (int i = 0; i < 100; ++i) {
std::lock_guard<LockableBase(std::mutex)> lock(AccMutex);
ZoneScopedNS("Counting", CALLSTACK_DEPTH);
SharedCounter += 1;
std::this_thread::sleep_for(std::chrono::microseconds{ 10 });
TracyPlot("Counter Value", static_cast<int64_t>(SharedCounter));
}
}
int main() {
std::cout << "HELLO" << std::endl;
TracyPlotConfig("Counter Value", tracy::PlotFormatType::Number);
ZoneScopedNS("Main Function", CALLSTACK_DEPTH);
TracyMessageL("Starting Thread 1");
std::thread t1(threadFunc, 1);
TracyMessageL("Starting Thread 2");
std::thread t2(threadFunc, 2);
t1.join();
TracyMessageL("Thread 1 Finished");
t2.join();
TracyMessageL("Thread 2 Finished");
std::cout << SharedCounter << std::endl;
return 0;
}
MemFree and MemAlloc calls are missing the last parameter:
tracy/client/TracyProfiler.hpp
Line 418 in 4881f7a
tracy/client/TracyProfiler.hpp
Line 396 in 4881f7a
We are using ImGuiColorTextEditor inside our project, and so is Tracy profiler. However, Tracy has included it inside the tracy namespace (profiler). This leads to it being required twice... inside and outside the namespace so that we may use it or tracy may use it.
You can see these changes to the ImGuiColorTextEditor project in the texteditor.h and texteditor.cpp.
Requesting this 3rd party lib be outside the tracy namespace so it may be included once... To include only the standard ImGuiColorTextEditor introduces a linker error that tracy cannot find it. You would still be able to ship the version you provide, but you would not conflict with folks using a competing equivalent library.
Tracy provides a convenient way for instrumentation of std::mutex
with TracyLockable
wrapper and integration with std::lock_guard
using LockableBase
, but this is not enough to cover all use cases. A way for instrumentation of std::mutex
locks using std::condition_variable
is also required:
// common thread variables
std::mutex wait_mutex;
std::condition_variable wait_condition_var;
bool is_signalled = false;
// waiting thread
std::unique_lock<std::mutex> lock(wait_mutex);
wait_condition_var.wait(lock, [this]{ return is_signalled; });
// signalling thread
is_signalled = true;
wait_condition_var.notify_one();
TracyWorker makes use of initializer lists in structures which inherit from other structures. This isn't supported in Visual Studio until C++ 17, and apparently only on VS 2019. VS 2017 doesn't seem to support it properly. This requirement feels a bit arbitrary because if I replace with a simple constructor for the code, it builds and executes properly as C++ 11 on VS 2017.
Example error:
TracyWorker.cpp(284,35): error C2440: 'initializing': cannot convert from 'initializer list' to 'tracy::SourceLocation'
There's only 3 errors total so it should be relatively easy to switch back.
Tracy. Exe-
Unable to find entrance
Unable to locate SetThreadDescription on the dynamic link library KERNEL32.dll
win7x64
Hi,
Looking at the Zone-API all I see is starting of zones and implicit closing at the end of a scope. I would like to have a bit more control of being able say ZoneStartName(name)
and then a matching ZoneEndName(name)
.
When profiling larger functions I find it ugly to wrap every subpart in scopes to use it with ZoneNamed and it often just plain is in the way.
I've built Tracy profiler and TestCpu app from examples v0.6.3
for Windows x64 with VS2019 (see binaries here, note that TestCpu was modified to render 100 frames to work a little longer on my machine) and tried some testing with the folowing steps:
Connect
button in Tracy app with default address 127.0.0.1
=> message Waiting for connection
is displayed forever.I've tried this test even with disabled firewall and antivirus with same result. Network monitor does not show any ports open by TestCpu app. What I'm doing wrong? Could you also describe how Tracy initializes its connection wihtout any additional function calls just with TestClient.cpp
added to the target application build?
Hi,
One of the changes I have to do to integrate tracy in my company was to improve the client __FUNCTION__
based source location by constexpr
-processing __PRETTY_FUNCTION__
to get full qualified function names. The issue is that this introduces a change that I have to manually patch whenever I want to update the profiler server to get the latest features and fixes.
I was thinking that maybe tracy could open the door for a bit of customization of source location by allowing users to provide their own alternatives:
constexpr std::string_view ParseFunctionName(std::string_view funcname)
{
return ...;
}
#define TRAYC_SOURCE_LOCATION_FUNCTION \
ParseFunctionName(__PRETTY_FUNCTION__).data()
#include <Tracy.hpp>
and tracy uses __FUNCTION__
by default (To keep the current behavior as default):
#ifndef TRACY_SOURCE_LOCATION_FUNCTION
#define TRACY_SOURCE_LOCATION_FUNCTION __FUNCTION__
#endif
...
#define ZoneNamed( varname, active ) static const tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, TRACY_SOURCE_LOCATION_FUNCTION, ...)
The same could apply to the file and line info. With full customization users could decide using C++20 std::source_location
(Or similar lib feature) if they want:
#define TRACY_SOURCE_LOCATION_FILE std::source_location::current().file_name()
#define TRACY_SOURCE_LOCATION_LINE std::source_location::current().line()
#define TRACY_SOURCE_LOCATION_FUNCTION std::source_location::current().function_name()
Would you be interested in a PR implementing this feature?
Thanks.
The number of parameters in some of the macros in TracyOpenCL.hpp
with and without TRACY_ENABLE
is different and some macros are even missing when compiled without Tracy enabled (e.g., TracyCLZoneSetEvent). This leads to build errors.
I can file a PR on this when I have some time. Seems like a trivial fix.
Hello, I am experimenting with the GPU tracing capabilities and I am trying to understand what GPU tracing capabilities does tracy offer. I couldn't find an example code using this feature. So, to see what is does I have the following Draw function in my sample application.
void Draw()
{
ZoneScoped;
TracyGpuZone("GPU Draw");
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
TheScene->Draw();
}
And right after I initialise my context I call TracyGpuContext
.
In the profiler UI I see a zone with the name "GPU Draw". When I hover the mouse in it I get a GPU execution time. Which is great! I was just wondering if this is all that is meant to be collected and what would be some other use cases for the TracyGpuZone
feature.
Thanks.
My use case is I have relatively short lived processes, usually just pressing the "connect" button and then running it is enough. I don't really want to use the feature that prevents the program from exiting. But sometimes the same process runs multiple times and the one I need to profile isn't always the first one, or I need to profile them all. Not sure how this would work if there's multiple processes running at the same time. If that would be limited in some way. That does happen, generally it is just one process running one after the other.
It would be really useful to just have a "start listening" button and then it'll capture everything until "stop listening" is pressed or otherwise. Then having a list to choose from the traces with some details about them would be very useful.
I briefly checked the manual and the UI and couldn't find this. I'm referring to this button: https://i.imgur.com/TUDlV72.png
I tried using the Self Time mark for the histogram but that wasn't it.
I think this could be useful for a zone that results in rare spikes in frames but which has very little self time, and for which the time is spread in many smaller zones (or which has different high latency zones in it in different frames)
Trying to enable ios Call stack, but consistently getting EXC_BAD_ACCESS IN tracy_rpmalloc.cpp.
Followed everything in #25 and the callstack is only 2 frames. Thoughts?
I've written a simple program using the recommended new & delete overloads from the manual:
#include <new>
#include <Tracy.hpp>
void* operator new(std::size_t count)
{
auto ptr = malloc(count);
TracyAlloc(ptr, count);
return ptr;
}
void operator delete(void* ptr) noexcept
{
TracyFree(ptr);
free(ptr);
}
int main() {}
Compile it with g++ -DTRACY_ENABLE path/to/tracy/TracyClient.cpp -I path/to/tracy/ x.cpp -lpthread -ldl -lOSMesa
. When I try to run the executable, I get an assert:
TracyProfiler.cpp:2602: void tracy::Profiler::CalibrateDelay(): Assertion `sz > 0' failed.
The happens with the 0.7 release and the current master (420bdd5). In release mode (NDEBUG defined), due to the lack of the assert CalibrateDelay actually ends up in an infinite loop. If I remove the operator new
and delete
, this small sample works correctly. If I remove -lOSMesa
, it works too.
If I set a breakpoint inside operator new
in gdb it is called from llvm (a dependency of osmesa) quite a few times, while still in the dynamic loader:
#0 operator new (count=40) at /mnt/ram/x.cpp:6
#1 0x00007ffff448b4be in ?? () from /usr/lib/llvm/10/lib64/libLLVM-10.so
#2 0x00007ffff7f681b7 in __pthread_once_slow (once_control=0x7ffff6cfca8c, init_routine=0x7ffff71896d0 <__once_proxy>) at pthread_once.c:116
#3 0x00007ffff448b5b5 in void std::call_once<void (&)()>(std::once_flag&, void (&)()) () from /usr/lib/llvm/10/lib64/libLLVM-10.so
#4 0x00007ffff448b63b in llvm::ManagedStaticBase::RegisterManagedStatic(void* (*)(), void (*)(void*)) const () from /usr/lib/llvm/10/lib64/libLLVM-10.so
#5 0x00007ffff442ccaa in llvm::cl::OptionCategory::registerCategory() () from /usr/lib/llvm/10/lib64/libLLVM-10.so
#6 0x00007ffff437412a in llvm::orc::NullLegacyResolver::findSymbolInLogicalDylib(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/llvm/10/lib64/libLLVM-10.so
#7 0x00007ffff7fe2dfa in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffd438, env=env@entry=0x7fffffffd448) at dl-init.c:72
#8 0x00007ffff7fe2ef9 in call_init (env=0x7fffffffd448, argv=0x7fffffffd438, argc=1, l=<optimized out>) at dl-init.c:30
#9 _dl_init (main_map=0x7ffff7ffe130, argc=1, argv=0x7fffffffd438, env=0x7fffffffd448) at dl-init.c:119
#10 0x00007ffff7fd40ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#11 0x0000000000000001 in ?? ()
#12 0x00007fffffffd85c in ?? ()
#13 0x0000000000000000 in ?? ()
And profiler is only initialized later, when c++ global constructors are called
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff6da153d in __GI_abort () at abort.c:79
#2 0x00007ffff6da1411 in __assert_fail_base (fmt=0x7ffff6f05058 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x5555555bbc35 "sz > 0", file=0x5555555bba5c "client/TracyProfiler.cpp", line=2602, function=<optimized out>) at assert.c:92
#3 0x00007ffff6db0282 in __GI___assert_fail (assertion=0x5555555bbc35 "sz > 0", file=0x5555555bba5c "client/TracyProfiler.cpp", line=2602, function=0x5555555bc200 "void tracy::Profiler::CalibrateDelay()") at assert.c:101
#4 0x00005555555983dd in tracy::Profiler::CalibrateDelay (this=0x5555555c9300 <tracy::s_profiler>) at client/TracyProfiler.cpp:2602
#5 0x0000555555591a76 in tracy::Profiler::Profiler (this=0x5555555c9300 <tracy::s_profiler>) at client/TracyProfiler.cpp:1080
#6 0x00005555555b5d14 in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=105) at client/TracyProfiler.cpp:1014
#7 0x00005555555b5e55 in _GLOBAL__sub_I.00105__ZN5tracy6detail19GetThreadHandleImplEv(void) () at libbacktrace/elf.cpp:3512
#8 0x00005555555b9ab5 in __libc_csu_init (argc=argc@entry=1, argv=argv@entry=0x7fffffffd438, envp=0x7fffffffd448) at elf-init.c:88
#9 0x00007ffff6da2cac in __libc_start_main (main=0x5555555b9a5e <main()>, argc=1, argv=0x7fffffffd438, init=0x5555555b9a70 <__libc_csu_init>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd428) at ../csu/libc-start.c:264
#10 0x000055555555861a in _start ()
OS: Gentoo Linux, mesa-20.1.2, gcc 9.3.0, but the same happens with clang too.
it's not possible to use the profiler on my laptop's screen resolution (3840x2160).
When I build Tracy/profiler
on MacOS 10.15.4 with make release
the result executable crashes on start ./Tracy-release
. While debug executable built with make debug
starts normally. I compared debug and release compilation flags and root caused it down to flag -fomit-frame-pointer
. When this flag is removed Tracy-release
starts normally on MacOS.
It's common in C codebases to use non-local exits via setjmp/longjmp for error recovery. Because Tracy zones currently use implicit pairing between zone begin and end commands, a non-local exit will generally break the pairing invariant.
To address this problem, I'd suggest a variant of the zone begin/end commands with an explicit zone ID. The ID can still be generated implicitly with macros similar to the current zone macros (e.g. take the address of a static var to get a unique ID). The zone end command with an explicit ID will pop zones from the zone stack until it finds a zone with the matching ID. In the application code that sets up an error recovery context with setjmp, the programmer can then surround that with a zone begin/end with an explicit ID.
I hacked this into my local copy of Tracy, but it's just a few lines of code and I figure you'd be better suited to deciding how you want to integrate this, so I won't bother with a pull request. Thanks for all the good work on Tracy!
When GPU zones with a duration of 0 (start == end) are present, they can cause themself and other zones to disappear if they are being shown in the profiler. Most of these artifacts can be avoided if a branch is commented out at TracyView.cpp:4142,
end = AdjustGpuTime( end, begin, drift );
const auto zsz = std::max( ( end - start ) * pxns, pxns * 0.5 );
//if( zsz < MinVisSize )
if (false) // Bypass path where zones become 'squiggled out' for being too small on screen.
{
int num = 0;
const auto px0 = ( start - m_vd.zvStart ) * pxns;
The exact rules to reproduce these artifacts seems fairly involved, but here's some demoing to help explain the problem. Notice the "GPU execution time: 0 ns".
Without change: https://i.imgur.com/kpPyqsE.gifv
With change: https://i.imgur.com/dwaKaGf.gifv
The following trace can be used to reproduce the issue. Renamed the extension to comply with GitHub restrictions.
ZeroDurationGPUZones.txt
I'm trying to use Tracy from Android and have been unable to get past this SIGSEGV fault. I can build and link fine, but just one Tracy C call (TracyCZoneN
) triggers this failure on startup (i.e. from __cxx_global_var_init
before the my C call is reached), so I assume I'm missing something fundamental...
Tracy is being built with these flags currently :
-DTRACY_ENABLE -fno-sanitize=undefined -DTRACY_DELAYED_INIT=1 -DENABLE_PRELOAD -DENABLE_THREAD_CACHE=1
Any guidance on where to begin or what a failure in _memory_heap_thread_cache_extract
implies is greatly appreciated.
: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6b2f1d5e294bd3
backtrace:
#00 pc 0000000000122d48 lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL33_memory_heap_thread_cache_extractEPNS_6heap_tEm+36)
#01 pc 0000000000122c24 lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL29_memory_heap_extract_new_spanEPNS_6heap_tEmj+20)
#02 pc 0000000000122f58 lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL22_memory_allocate_largeEPNS_6heap_tEm+40)
#03 pc 000000000012297c lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL26_memory_allocate_oversizedEPNS_6heap_tEm+24)
#04 pc 000000000011ead0 lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL16_memory_allocateEPNS_6heap_tEm+56)
#05 pc 000000000011ea74 lib/arm64/libandroid_native_app_glue.so (_ZN5tracy8rpmallocEm+24)
#06 pc 000000000010a294 lib/arm64/libandroid_native_app_glue.so (_ZN5tracyL12tracy_mallocEm+8)
#07 pc 00000000001168b0 lib/arm64/libandroid_native_app_glue.so (_ZN5tracy8ProfilerC1Ev+176)
#08 pc 00000000000df188 lib/arm64/libandroid_native_app_glue.so (__cxx_global_var_init.8+24)
#09 pc 00000000000df1f4 lib/arm64/libandroid_native_app_glue.so (_GLOBAL__I_000105+8)
In section 3.1 of the manual the following snippet can be found:
3.1 Handling text strings
When dealing with Tracy macros, you will encounter two ways of providing string data to the profiler. In both cases you should pass const char* pointers, but there are differences in expected life-time of the pointed data.
- When a macro only accepts a pointer (for example: TracyMessageL(text)), the provided string data must be accessible at any time in program execution (this also includes the time after exiting the main function). The string also cannot be changed. This basically means that the only option is to use a string literal (e.g.: TracyMessageL("Hello")).
- If there’s a string pointer with a size parameter (for example: TracyMessage(text, size)), the profiler will allocate an internal temporary buffer to store the data. The pointed-to data is not used afterwards. You should be aware that allocating and copying memory involved in this operation has a small time cost.
While this paragraph is only relevant to macros, I think there is something to be said about extending this concept to at least some of the functions as well.
For instance the signatures for the ___tracy_alloc_srcloc_*
functions are currently these:
TRACY_API uint64_t ___tracy_alloc_srcloc( uint32_t line, const char* source, const char* function );
TRACY_API uint64_t ___tracy_alloc_srcloc_name( uint32_t line, const char* source, const char* function, const char* name, size_t nameSz );
Note that name
has an associated size parameter, however source
and function
do not. This, in addition to being inconsistent, can also necessitate additional allocations for the API users who don’t have null-terminated strings handy.
If this change were implemented, the users who do deal in 0-terminated strings would end up having to strlen
them at a call location. However the implementation of this function strlen
s the arguments internally anyway, so the cost of allocating a location would not change for those users, while it would improve, ever so slightly, for those who have the lengths handy.
HI, Can tracy profile GPU on Android ?
I've added TracyGpuContext and TracyGpuNamedZone at the code, but it doesn't work.
After breakpoints, it is found that the code is executed, There was no error.
On the server profiler, it just shows OpenGL context 0 with empty GPU zones.
#if defined _WIN32 || defined __CYGWIN__
should be
#if defined _WIN32 || defined __CYGWIN__ || __MINGW32__
First of all, I would say thank you for your amazing job! I always wanted to profile my code and never find the Swiss Army knife for that (CPU / GPU / memory / performance per line of code).
I read the manual and look in the code of the master
branch to understand the limitations/restrictions for macOS.
I would like to have your opinion about the following points to know if they can be improved/fixed:
TRACY_NO_EXIT
/ Profiling is interrupted when the application exits : Is this a limitation in the macOS architecture or do you think it might have a workaround/improvement to fix this?Would it be possible to add prebuilt binaries of the visualizer app? Making prebuilt binaries available would reduce the friction of the initial setup. It's easy to add the Tracy runtime to an app, but a little harder to build the visualizer (fiddling with vcpkg, and requires VS2019 which isn't necessarily available in a commercial shop).
For example the Optick profiler:
https://github.com/bombomby/optick/releases
has its visualizer app prebuilt and available for download, which is all that's needed most of the time.
Did not find anything about it in the manual in chapters 3.13.4 or 5.2.3.3 (A search for " rate" did not yield anything either)
Is there some technical limitation for this on windows, did I just miss it, or is it a nice-to-have possible future feature?
If I'm reading this right (Which I'm likely not to be)
tracy/client/TracySysTrace.cpp
Lines 214 to 217 in aa7851d
Since Tracy is a cross-platform project that targets multiple operating and build systems it is highly required to support CMake build and integration with other CMake-based projects. While it's generally easy to add TracyClient.cpp
to the project build, it may look dirty in CMakeList.txt to add some external file to your module and it would be much cleaner to add static linking with externally defined TracyClient
CMake target.
Hi, I had to install capstone via vcpkg to build on windows 10 with visual studio 2019.
vcpkg.exe install --triplet x64-windows-static capstone
I have a trace that contains 1.8M messages (according to tracy's message window). With this many messages any operations involving the message window are very slow. Opening the window takes seconds, closing it also takes seconds. While the message window is open, the main trace view is not responsive either, however when it is closed, there's no perceptible performance impact on Tracy.
Interestingly the main trace view does not suffer from this problem and is able to display an arrow for each message and the message contents when the arrow is hovered over without much effort.
Let me know if you need more information and if so, what.
Hi there,
I had an issue with combining 'TRACY_DELAYED_INIT' on Windows, causing fails with rpmalloc.
It might be also correlated to issue #42, since (as far as I understand) for apple the 'TRACY_DELAYED_INIT' is set.
During investigation, I found that line 163 in TracySystem.cpp caused all the fuss:
const auto sz = strlen( name );
char* buf = (char*)tracy_malloc( sz+1 );
memcpy( buf, name, sz );
buf[sz+1] = '\0';
buf[sz+1] = '\0';
should be buf[sz] = '\0';
I guess.
And thanks for that great software :D
Sometimes it's desirable to temporarily interrupt recording of execution time in a zone.
My use case is a scheduler that (among other things) handles control over to worker coroutines. With Tracy's current zone model, the scheduler zone would be a parent of all worker thread zones, but in my concrete use case I would prefer the worker thread zones to appear on the same level as the scheduler zone.
The scheduler code looks vaguely like this:
void Scheduler() {
TracyCZone(SchedulerZone, true);
while (true) {
// ...
// do some work
// ...
// invoke next worker
// Proposed: TracyCZoneInterrupt(SchedulerZone)
co_await worker_coroutine();
// Proposed: TracyCZoneResume(SchedulerZone)
}
}
With the current model, the scheduler zone would simply cover 100% of the program's execution time. With support for zone interruption, the profiler could properly display how much time is truly spent in the scheduler itself.
Tracy's internal API seems to already support this but there are no macros that expose this functionality: TracyCZoneInterrupt
is equivalent to TracyCZoneEnd
, and TracyCZoneResume is equivalent to ___tracy_emit_zone_begin
(i.e. TracyCZone but without allocating a new context).
After applying the following (unrelated) patch to fix a GCC error:
--- a/server/TracyView.cpp
+++ b/server/TracyView.cpp
@@ -12656,7 +12656,7 @@ void View::DrawInfo()
pdqsort_branchless( vec.begin(), vec.end(), []( const auto& lhs, const auto& rhs ) { return strcmp( lhs->first, rhs->first ) < 0; } );
for( auto& v : vec )
{
- ImGui::BulletText( v->first );
+ ImGui::BulletText( "%s", v->first );
if( ImGui::IsItemClicked() ) ViewSource( v->first, 0 );
ImGui::SameLine();
ImGui::TextDisabled( "(%s)", MemSizeToString( v->second.len ) );
Compilation gets to the end and exits with linker errors:
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(long*, long*, std::less<long>)#1}>(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(long*, long*, std::less<long>)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(long*, long*, std::less<long>)#1}>(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, long*, std::less<long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, long*, long*, std::less<long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(long*, long*, std::less<long>)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x28): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x28): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE[_ZTVN6__pstl13__par_backend12__merge_taskIPlS2_S2_St4lessIlENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE]+0x28): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTIN6__pstl13__par_backend18__stable_sort_taskIPlS2_St4lessIlEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE[_ZTIN6__pstl13__par_backend18__stable_sort_taskIPlS2_St4lessIlEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyView.o:(.data.rel.ro._ZTVN6__pstl13__par_backend18__stable_sort_taskIPlS2_St4lessIlEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE[_ZTVN6__pstl13__par_backend18__stable_sort_taskIPlS2_St4lessIlEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE]+0x28): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `std::enable_if<__pstl::execution::v1::is_execution_policy<std::decay<__pstl::execution::v1::parallel_unsequenced_policy const&>::type>::value, void>::type std::sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*>(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*) [clone .isra.0]':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, tracy::PlotItem*, tracy::PlotItem*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, tracy::PlotItem*, tracy::PlotItem*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `_ZNK3tbb10interface78internal18delegated_functionIKZN6__pstl13__par_backend22__parallel_stable_sortIRKNS3_9execution2v127parallel_unsequenced_policyEPN5tracy6Worker14ZoneThreadDataEZZNSC_C4ERNSB_8FileReadENSB_9EventType4TypeEbENKUlvE1_clEvEUlRKT_RKT0_E5_ZZNS3_10__internal14__pattern_sortISA_SE_SQ_St17integral_constantIbLb1EEEEvOSK_SN_SN_T1_T2_SU_SU_ENKUlvE_clEvEUlSE_SE_SQ_E_EEvSV_SN_SN_SW_SX_mEUlvE_vEclEv':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `_ZNK3tbb10interface78internal18delegated_functionIKZN6__pstl13__par_backend22__parallel_stable_sortIRKNS3_9execution2v127parallel_unsequenced_policyEPN5tracy6Worker14ZoneThreadDataEZZNSC_C4ERNSB_8FileReadENSB_9EventType4TypeEbENKUlvE1_clEvEUlRKT_RKT0_E5_ZZNS3_10__internal14__pattern_sortISA_SE_SQ_St17integral_constantIbLb1EEEEvOSK_SN_SN_T1_T2_SU_SU_ENKUlvE_clEvEUlSE_SE_SQ_E_EEvSV_SN_SN_SW_SX_mEUlvE_vEclEv':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, unsigned int*, unsigned int*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, unsigned int*, unsigned int*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: more undefined references to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const' follow
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `std::thread::_State_impl<std::thread::_Invoker<std::tuple<tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda()#3}> > >::_M_run()':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tracy::Worker::ReconstructMemAllocPlot()':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tracy::Worker::HandlePostponedPlots()':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tracy::Worker::Exec()':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task_arena.h:216: undefined reference to `tbb::interface7::internal::isolate_within_arena(tbb::interface7::internal::delegate_base&, long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#5})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Exec()::{lambda(auto:1 const&, auto:2 const&)#5}, unsigned long)::{lambda()#1} const, void>::operator()() const [clone .cold]':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::PlotItem*, tracy::PlotItem*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, tracy::PlotItem*, tracy::PlotItem*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::HandlePostponedPlots()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const [clone .cold]':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `_ZNK3tbb10interface78internal18delegated_functionIKZN6__pstl13__par_backend22__parallel_stable_sortIRKNS3_9execution2v127parallel_unsequenced_policyEPN5tracy6Worker14ZoneThreadDataEZZNSC_C4ERNSB_8FileReadENSB_9EventType4TypeEbENKUlvE1_clEvEUlRKT_RKT0_E5_ZZNS3_10__internal14__pattern_sortISA_SE_SQ_St17integral_constantIbLb1EEEEvOSK_SN_SN_T1_T2_SU_SU_ENKUlvE_clEvEUlSE_SE_SQ_E_EEvSV_SN_SN_SW_SX_mEUlvE_vEclEv.cold':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(tracy::SymbolLocation*, tracy::SymbolLocation*, {lambda(auto:1 const&, auto:2 const&)#2})#1}>(std::integral_constant<bool, true>, tracy::SymbolLocation*, tracy::SymbolLocation*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::Worker(tracy::FileRead&, tracy::EventType::Type, bool)::{lambda(auto:1 const&, auto:2 const&)#2}, unsigned long)::{lambda()#1} const, void>::operator()() const [clone .cold]':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1}, std::integral_constant<bool, true>, std::integral_constant, std::integral_constant)::{lambda()#1}::operator()() const::{lambda(unsigned int*, unsigned int*, {lambda(auto:1 const&, auto:2 const&)#1})#1}>(std::integral_constant<bool, true>, unsigned int*, unsigned int*, __pstl::execution::v1::parallel_unsequenced_policy const&, tracy::Worker::ReconstructMemAllocPlot()::{lambda(auto:1 const&, auto:2 const&)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const [clone .cold]':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_additional_child_of_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1179: undefined reference to `tbb::internal::allocate_additional_child_of_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_child_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1171: undefined reference to `tbb::internal::allocate_child_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_continuation_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1163: undefined reference to `tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(unsigned long*, unsigned long*, std::less<unsigned long>)#1}>(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(unsigned long*, unsigned long*, std::less<unsigned long>)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:86: undefined reference to `tbb::internal::allocate_via_handler_v3(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `operator new(unsigned long, tbb::internal::allocate_root_proxy const&)':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/task.h:1145: undefined reference to `tbb::internal::allocate_root_proxy::allocate(unsigned long)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o: in function `tbb::interface7::internal::delegated_function<__pstl::__par_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(unsigned long*, unsigned long*, std::less<unsigned long>)#1}>(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true> >(__pstl::execution::v1::parallel_unsequenced_policy const&, unsigned long*, unsigned long*, std::less<unsigned long>, std::integral_constant<bool, true>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(unsigned long*, unsigned long*, std::less<unsigned long>)#1}, unsigned long)::{lambda()#1} const, void>::operator()() const':
/nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: /nix/store/37v5czd0wr2q3m2l86xlci76a81x5x92-tbb-v2020.2/include/tbb/tbb_allocator.h:91: undefined reference to `tbb::internal::deallocate_via_handler_v3(void*)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE[_ZTIN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_14__binary_no_opENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E1_ZNSO_7executeEvEUlS2_S2_S2_E2_EEEE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x28): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x40): more undefined references to `typeinfo for tbb::task' follow
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x190): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x1c0): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x1f0): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x220): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x250): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x280): more undefined references to `tbb::task::note_affinity(unsigned short)' follow
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x578): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x5a0): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x5b8): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x5d0): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x5e8): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x690): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x6c0): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x6f0): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x720): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro+0x750): undefined reference to `tbb::task::note_affinity(unsigned short)'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTVN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE[_ZTVN6__pstl13__par_backend12__merge_taskIPmS2_S2_St4lessImENS0_16__serial_destroyENS0_19__serial_move_mergeIZNS0_18__stable_sort_taskIS2_S2_S4_ZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SJ_T1_T2_SG_SG_ENKUlvE_clEvEUlS2_S2_S4_E_E7executeEvEUlS2_S2_E_ZNSO_7executeEvEUlS2_S2_S2_E0_EEEE]+0x28): more undefined references to `tbb::task::note_affinity(unsigned short)' follow
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTIN6__pstl13__par_backend18__stable_sort_taskIPmS2_St4lessImEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE[_ZTIN6__pstl13__par_backend18__stable_sort_taskIPmS2_St4lessImEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE]+0x10): undefined reference to `typeinfo for tbb::task'
/nix/store/nyhj00w339gk2gaj3faz70gjrnbmam8v-binutils-2.31.1/bin/ld: obj/debug/o/o/o/../../../server/TracyWorker.o:(.data.rel.ro._ZTVN6__pstl13__par_backend18__stable_sort_taskIPmS2_St4lessImEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE[_ZTVN6__pstl13__par_backend18__stable_sort_taskIPmS2_St4lessImEZZNS_10__internal14__pattern_sortIRKNS_9execution2v127parallel_unsequenced_policyES2_S4_St17integral_constantIbLb1EEEEvOT_T0_SG_T1_T2_SD_SD_ENKUlvE_clEvEUlS2_S2_S4_E_EE]+0x28): undefined reference to `tbb::task::note_affinity(unsigned short)'
collect2: error: ld returned 1 exit status
make[1]: *** [build.mk:73: Tracy-debug] Error 1
make[1]: Leaving directory '/home/andy/Downloads/tracy/profiler/build/unix'
make: *** [Makefile:4: debug] Error 2
I have tried TBB versions:
Which version is tracy intended to be built with?
Thanks for the help.
When using the viewer, the live updating should respect the current zoom level. It's okay for "Resume" to start you at the tens of milliseconds range, but once you zoom out it should respect your zoom level. Otherwise, you have to keep manually dragging the view to the latest events, and the most zoomed in level is pretty useless for certain types of applications.
after extracting this zip
and also installing libtbb-dev
I did cd profiler/build/unix/;make
but no matter what version I use from 0.6 to 0.6.3 it always fails
as tbb
was not even mentioned on the manual .pdf, and it let me compile more than before, now I feel lost...
has anyone compiled on ubuntu 18.04?
I quite often want to know things like "what functions took long during this frame", "how often did this zone appear during this function call", "was this also a problem when the client wasn't connected to the server" or "what took long only during startup". Right now, tracy can't answer these questions since the statistics evaluates all zones globally. It would be great, to be able to restrict the statistics window to a timeframe, similar to how one can create annotations. Just select a timeframe and the statistics only evaluate zones that overlap the timeframe. Then tracy would be able to answer all these questions.
Also one more oddity I noticed: inclusive/exclusive time measurement is a toggle in tracy, when basically all other profiling frontends I know display this information side by side. I don't know if there is a benefit from doing this differently, but personally, I have stumbled a couple of times about this break in convention. So if there is no good reason why this is the way it is, I would find it more accessible to match the existing convention.
I'd like to add a couple of global metrics like heap size and CPU load in my chrome-tracing files. Is there an appropriate API I should use in import-chrome.cpp
to import those?
Tracy.exe in v0.7 release requires your CPU to support AVX2, which is not documented in the README, nor the User Manual as far as I can tell.
When run via double-click, the precompiled binary, Tracy.exe
, provided in the v0.7 release (note: I have not tested any prior release) silently fails and immediately terminates on my machine.
Of course the next thing I tried was running from a command line:
It took me a while to understand that this was referring to a literal assembly instruction rather than a Tracy-specific error, as I had never seen or heard of this before, nor does Windows make it terribly apparent that this is an exception.
I decided to clone the repo and compile the profiler/build/win32/Tracy.sln
project myself to see if I could repro. Indeed, it immediately threw an illegal instruction exception at tracy_xxh3.h:625
which is this line in the xxHash3 source:
return v64 ^ (v64 >> shift);
I did some Googling and found this StackOverflow answer which states (with regard to an unrelated program):
As it turns out, the .sln file that came with the reconstruction code was set with AVX2, which was unsupported on my machine.
Going to Configuration Properties >> C/C++ >> Code Generation and setting "Enable Enhanced Instruction Set" to AVX solved the issue.
The assembly code now shows "SHL" instead of "SHLX," so the "illegal instruction" was the actual SHLX command not being available, not an issue with the parameters going into SHLX.
I verified the via the dissasembly that there was indeed a SHRX
(shift right instead of left) instruction present, causing the exception.
As the SO user suggested, I changed the "Enable Enhanced Instruction Set" setting from Advanced Vector Extensions 2 (/arch:AVX2)
to Advanced Vector Extensions (/arch:AVX)
and recompiled. I can verify that Tracy.exe now starts and runs as expected.
I am running an Intel Core i5 2500K, but I suspect this issue will manifest in a similar way on any machine that does not support AVX2. I'm not certain if xxHash3 is your only dependency on AVX2, or if you're using it elsewhere. Either way, it would be very useful to provide guidance in the documentation about this dependency and how to change the project settings to support slightly older CPUs.
I'm not qualified to do any performance testing to understand exactly how this affects Tracy's performance, but there are likely existing benchmarks for xxHash3 if that is the only reason you're using AVX2.
Thanks for your time. This is a very intriguing project and the User Manual is a most excellent read.
-Dan
When I try to start my game, which is instrumented using tracy, in RenderDoc, the game instantly crashes due to a static variable of Tracy's moodycamel queue failing to initialize. The actual violation is a nullptr dereference inside a critical section of malloc.
This is a bug that seems to be the result of some weird interaction and the tool RenderDoc: I originally thought this was an issue with RenderDoc, and reported it, but the maintainer pointed out to me that this is actually a crash in my application (see the issue at RenderDoc's Github for details).
The stacktrace shows that the crash happens, when malloc tries to take a lock duing the initialization of a ProducerToken inside of Tracy:
RtlpWaitOnCriticalSection
RtlpEnterCriticalSectionContended
RtlEnterCriticalSection
__acrt_lock Line 55 at minkernel\crts\ucrt\src\appcrt\internal\locks.cpp(55)
heap_alloc_dbg_internal Line 309 at minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp(309)
heap_alloc_dbg Line 450 at minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp(450)
_malloc_dbg Line 496 at minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp(496)
tracy::moodycamel::ConcurrentQueueDefaultTraits::WORKAROUND_malloc Line 224 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(224)
tracy::moodycamel::ConcurrentQueueDefaultTraits::malloc Line 226 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(226)
tracy::moodycamel::ConcurrentQueuetracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits::create<tracy::moodycamel::ConcurrentQueuetracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits::ExplicitProducer,tracy::moodycamel::ConcurrentQueuetracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits *> Line 1428 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(1428)
tracy::moodycamel::ConcurrentQueuetracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits::recycle_or_create_producer Line 1366 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(1366)
tracy::moodycamel::ConcurrentQueuetracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits::recycle_or_create_producer Line 1346 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(1346)
tracy::moodycamel::ProducerToken::ProducerTokentracy::QueueItem,tracy::moodycamel::ConcurrentQueueDefaultTraits Line 1458 at B:\spaced\source\tracy\client\tracy_concurrentqueue.h(1458)
tracy::`dynamic initializer for 's_token_detail'' Line 975 at B:\spaced\source\tracy\client\TracyProfiler.cpp(975)
__dyn_tls_init Line 79 at d:\agent_work\5\s\src\vctools\crt\vcstartup\src\tls\tlsdyn.cpp(79)
LdrpCallInitRoutine
LdrpCallTlsInitializers
LdrpInitializeThread
_LdrpInitialize
LdrpInitialize
LdrInitializeThunk
The maintainer of RenderDocs guess on the bug is the following:
If I had to guess I'd say that your code enters a critical section in some static initialiser that runs on thread attach, but the critical section isn't initialised until after main() is entered. RenderDoc injects a thread to insert its hooks which will run before main(), so any global initialisers that are fragile like this can break.
Now. I don't really know if this a bug in your code, or moodycamels, or even MSVC C++ library, but since you have comments in TracyProfiler.cpp that mention binary sections and initialization just above the code in question (lines 974 and 975) I hope that you might know how to fix this.
I am on tracy version 0.7
If you need to repro the issue, I can send you my application+renderdoc and instructions on how to repro. It should take only a couple of minutes.
I have a program allocator of which is instrumented with the ___tracy_emit_memory*
calls. This program also uses TLS and sets up some TLS destructors during its runtime.
On windows this program will encounter an access violation during shutdown. This is what happens:
tracy::Profiler::~Profiler
is called by ucrtbase!execute_onexit_table
.ntdll!LdrShutdownProcess
;___tracy_emit_memory_free_callstack(...)
;I see a couple options to resolve this:
The easy ones:
Profiler
instance/let OS to deal with it?m_shutdown
, perhaps? Likely UB because its use-after-free as well, given that this would be accessing a field of a destroyed class.The heavy-handed refactor-level options:
Let me know if you want me to get you the binary and/or source and/or full stacktraces and/or something else.
I will close this issue immediately but I would like to register that this is a fantastic project with one most well written manuals I have ever seem. If I end up using the profiler I will strongly consider sponsoring the project, but I am in the investigation phase for now.
When working on my vulkan engine, i had some troubles with the ergonomy of the tracy Vulkan traces. The main issue i got is that encoding the samples can be very finnicky, with the samples having to be encoded after a command buffer has begun, and before a command buffer ends. The default scope-based sampling can bring big issues to it.
Another issue is that in many engines, people write a command encoder of sorts, which saves abstracted GPU commands, and then the actual GPU execution is done deferred later. This is completely incompatible with the current way the vulkan traces work.
For the "need more control" part, what ive done is a copy of tracy::VkCtxScope that does not use RAII for injecting the queries, but instead uses Start(VkCommandBuffer cmd), and End() functions. This allows to encode vulkan zones across queue submits.
Its used like this. (pseudocode)
VkCommandBuffer cmd = allocate_buffer();
TracyVkNamedManualZone(profilercontext, graphZone, cmd, "Framegraph", true);
vkBeginCommandBuffer(cmd, &beginInfo);
for(auto& pass : passes){
graphZone.Begin(cmd); //begin the zone
pass->encode_commands(cmd);
graphZone.End(); //finish the zone before we submit
submit_command(cmd);
cmd = allocate_buffer(); //allocate another command
}
For the encoding part, what ive done is to define a TracySourceLocation() macro that saves only the source location. It can then be used as this.
TracySourceLocation(sourceLoc, "Some pass", tracy::Color::Grey);
encoder->begin_trace(&sourceLoc);
The idea is that later down the line, when the commands are decoded, you can do this with it.
void Decode_BeginTrace(CommandDecodeState* state, CMD_BeginTrace* cmd)
{
// grab the source location we encoded before
const tracy::SourceLocationData* sourceloc =cmd->profilerSourceLocation;
if (state->tracyScope == nullptr) {
//allocate a new ManualScope and start it
state->tracyScope = new tracy::VkCtxManualScope(profilerContext, sourceloc, state->cmd, true);
state->tracyScope->Start(state->cmd);
}
else {
//finish a ManualScope and then reset its source_location
state->tracyScope->End();
state->tracyScope->SetSourceLocation(sourceloc);
state->tracyScope->Start(state->cmd);
}
}
These changes are very minimal, and i can PR them if they sound useful.
Hi, I am doing more tests with Tracy and this time I am trying to use a DLL as described in the Section 2.1.4 of the manual. For this setup I have a single thread application that calls into a library (DLL) that is supposed to be profiled with Tracy but I am getting an access violation in the Profiler destructor. Here are more details of my setup
TracyClient.dll
containing just TracyClient.cpp
TracyBackend.dll
TracyBackend.dll
TRACY_NO_EXIT
This only happens when TRACY_NO_EXIT
is defined. Is there a limitation here?
The following image shows the place of the crash.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.