Ich versuche, ein C-Programm zu profilieren, das einige Methoden von openssl/libcrypto
verwendet. Alles funktioniert gut, wenn ich den Code kompiliere und ausführe, ohne Informationen zu erstellen. Wenn ich Optionen hinzufüge, um es mit gprof zu profilieren, erhalte ich unerwartete Ergebnisse vom Profiling-Tool.Kann libcrypto Methoden mit gprof nicht profilieren
Ich habe viele recherchiert, aber ich habe keine Seite gefunden, die mein Problem gelöst hat.
Dies ist mein Code (benannt test.c):
#include <stdio.h>
#include <openssl/bn.h>
#include <openssl/rand.h>
static BIGNUM *x;
static BIGNUM *y;
static BIGNUM *z;
static BIGNUM *p;
static BN_CTX *tmp;
static unsigned int max_size;
int main(void){
int max_bytes, res_gen;
max_bytes = 50;
tmp = BN_CTX_new();
BN_CTX_init(tmp);
x = BN_new();
y = BN_new();
z = BN_new();
p = BN_new();
RAND_load_file("/dev/urandom", max_bytes);
max_size = 256;
BN_rand(x, max_size, 0, 0);
BN_rand(y, max_size, 0, 0);
res_gen = BN_generate_prime_ex(p, max_size, 0, NULL, NULL, NULL);
BN_mul(z, x, y, tmp);
BN_nnmod(x, z, p, tmp);
printf("\nOk\n");
BN_free(x);
BN_free(y);
BN_free(z);
BN_free(p);
BN_CTX_free(tmp);
return 0;
}
Wenn ich mit Profilinformationen mit gcc -pg -static test.c -lcrypto -ldl
kompilieren, es die folgenden Ergebnisse erzielt. Ich bekomme 0% (und 0 Sekunden) für alles, was unerwartet ist.
Flat profile:
Each sample counts as 0.01 seconds.
no time accumulated
% cumulative self self total
time seconds seconds calls Ts/call Ts/call name
0.00 0.00 0.00 1 0.00 0.00 main
Call graph
granularity: each sample hit covers 2 byte(s) no time propagated
index % time self children called name
0.00 0.00 1/1 __libc_start_main [4282]
[1] 0.0 0.00 0.00 1 main [1]
0.00 0.00 0/0 mcount (3495)
0.00 0.00 0/0 BN_CTX_new [275]
0.00 0.00 0/0 BN_CTX_init [274]
0.00 0.00 0/0 BN_new [372]
0.00 0.00 0/0 RAND_load_file [1636]
0.00 0.00 0/0 BN_rand [386]
0.00 0.00 0/0 BN_generate_prime_ex [331]
0.00 0.00 0/0 BN_mul [370]
0.00 0.00 0/0 BN_nnmod [378]
0.00 0.00 0/0 puts [3696]
0.00 0.00 0/0 BN_free [327]
0.00 0.00 0/0 BN_CTX_free [272]
-----------------------------------------------
Auch scheint es, dass der Profiler nur die Haupt-Methode erkennt, weil Details für andere Methoden scheinen nicht in flachem Profil und Grafik nennen.
Also ich würde gerne wissen, ob ich OpenSSL-Bibliothek mit einigen Optionen (welche Optionen?) Oder etwas anderes kompilieren muss.
@jww: Danke für die Änderungen. Ich wusste nicht, wie man dieses Bild direkt hinzufügt. Der erste Befehlsfehler führt mich zur zweiten. Außerdem fügte ich ein zweites Bild für die zweiten Befehlsergebnisse hinzu. – Yssouf
@jww: Text hinzugefügt (ich hoffe auf die richtige Weise) – Yssouf
Ja, es sieht gut aus, danke. Und es testet auch gut: [Google-Suche BN_CTX_new gprof] (https://www.google.com/search?q=BN_CTX_new+grpof). Ihre Frage befindet sich im obersten Ergebnis, was bedeutet, dass sie für zukünftige Besucher indexiert ist. – jww