Pour Windows vérifier la StackWalk64() de l'API (également sur Windows 32 bits). Pour UNIX, vous devez utiliser le système d'exploitation d'origine de façon à le faire, ou de secours à glibc backtrace(), si disponible.
Notez toutefois que le fait de prendre une Stacktrace en code natif est rarement une bonne idée, non pas parce qu'il n'est pas possible, mais parce que vous êtes à l'ordinaire essayez d'atteindre quelque chose de mal.
La plupart du temps, les gens essaient d'obtenir une stacktrace, disons, d'une circonstance exceptionnelle, comme lorsqu'une exception est interceptée, une assertion échoue ou - pire et le plus mauvais de tous, lorsque vous obtenez une fatale "exception" ou signal comme une violation de segmentation.
Compte tenu de la dernière question, la plupart des Api vous demandera explicitement allouer de la mémoire ou peut le faire en interne. Le faire dans la fragilité de l'état dans lequel votre programme peut être actuellement dans, peut acutally rendre les choses encore pire. Par exemple, le rapport de crash (ou processus) ne reflète pas la cause réelle du problème, mais votre tentative a échoué à gérer).
Je suppose que vous essayez de réaliser que fatale, erreur de manipulation de chose, comme la plupart des gens semblent essayer que lorsqu'il s'agit d'obtenir une stacktrace. Si oui, je voudrais compter sur le débogueur (en cours de développement) et de laisser le processus de processus de production (ou mini-dump sur windows). Avec symbole approprié de gestion, vous devriez avoir aucun mal à déterminer la cause de l'instruction post-mortem.