Похоже, что инструмент профилирования собирает всю необходимую информацию исключительно из файла ETL и профилируемого исполняемого файла.
Я считаю, что информация стека вызовов в ETL файлы в основном поступают из события StackWalk MSNT_SystemTrace (другие события предоставляют такие сведения, как имена функций, но они не имеют решающего значения для моего запроса).
Я попытался получить PID процесса, связанного с этим поставщиком, с помощью API Windows, но результат был -1, чего я не понимаю.
Я подозреваю, что в новых версиях Mono или его зависимостях могли быть изменения, которые могли повлиять на запись этого события, но после этого я не обнаружил никаких различий. обширный поиск.
Я не уверен, что другие провайдеры и события играют роль в визуализации стеков вызовов, но мой предварительный обзор предполагает, что они, скорее всего, нет.
Дополнительный контекст: я нашел в .NET В журналах обновлений Framework указано, что в версии 4.0 появилась некоторая поддержка тестирования производительности, но я не уверен, влияют ли конкретные изменения на явление, которое я наблюдал, или они вообще влияют на Mono. Вот ссылка: https://learn.microsoft.com/en-us/previ ... dfrom=MSDN
Вот тестовый код, который я использовал (v2.0.50215 для старой версии, v4.0.30319 для новой версии):
Код: Выделить всё
int main(int argc, char** argv)
{
Mono mono;
char hello[] = "helloworld.exe";
char* path[1] = { hello };
MonoAssembly* assembly;
MonoDomain* domain;
getchar();
puts(argv[0]);
mono_api_init(&mono,".\\mono-2.0-bdwgc.dll");
//mono_api_init(&mono, ".\\mono-2.0.dll");
mono.set_assemblies_path(".\\lib");
//domain = mono.jit_init_version("myapp", "v4.0.30319");
domain = mono.jit_init_version("myapp", "v2.0.50215");
if (!domain)
{
puts("err1");
return -1;
}
getchar();
assembly = mono.domain_assembly_open(domain, "helloworld.exe");
puts("3");
getchar();
if (!assembly)
{
puts("err2");
return -1;
}
mono.jit_exec(domain, assembly, 1, path);
}
старая версия
новая версия
Одно из событий StackWalk(новая версия ):
Код: Выделить всё
0
2
0
0
32
0x0
5915705958622
0x8BDC
19588
0x77E31CF3
0x77E31CB4
0x77E31D75
0x7FFEFEE4EA8D
0x7FFEFEE4E18D
0x7FFF0112E57B
0x7FFF0111A86E
0x7FFF010C4383
0x7FFF010C42AE
0x7687122C
0x7A6FED10
0x7A64E138
0x7A64DBF3
0x7A6EF37E
0x7A6FBD77
0x7A6DCDFD
0x24A3480
0x3BC0447
0x7A6E52E7
0x77C53773
0x77C44596
0x77C43F07
0x7A6D9192
0x77C53773
0x77C44596
0x77C42E55
0x77C429A0
0x7A6FE642
0x3D9EA8A
0x3D9E7E6
0x3958E36
0x58AB93F
0xA97BE275000000000BC1EA77000000008FC0EA7700000000
Stack
MSNT_SystemTrace
StackWalk
{def2fe46-7bd6-4b80-bd94-f57fe20d0ce3}
Подробнее здесь: https://stackoverflow.com/questions/790 ... all-stacks