g3log/codespaces/index.html
2025-06-10 14:30:34 +00:00

503 lines
16 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="author" content="Kjell Hedstrom">
<link rel="canonical" href="https://kjellkod.github.io/g3log/codespaces/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
<title>Codespaces - G3log, an asynchronous "crash-safe" logger</title>
<link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#codespaces" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="G3log, an asynchronous &#34;crash-safe&#34; logger" class="md-header__button md-logo" aria-label="G3log, an asynchronous "crash-safe" logger" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
G3log, an asynchronous "crash-safe" logger
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Codespaces
</span>
</div>
</div>
</div>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="G3log, an asynchronous &#34;crash-safe&#34; logger" class="md-nav__button md-logo" aria-label="G3log, an asynchronous "crash-safe" logger" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
G3log, an asynchronous "crash-safe" logger
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Introduction to G3log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../g3log.md" class="md-nav__link">
<span class="md-ellipsis">
G3log usage
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../API/" class="md-nav__link">
<span class="md-ellipsis">
API description
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../API_custom_formatting/" class="md-nav__link">
<span class="md-ellipsis">
API for custom log formatting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../building/" class="md-nav__link">
<span class="md-ellipsis">
Configure, Build, Package, Install and Test
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../contributing/" class="md-nav__link">
<span class="md-ellipsis">
License and contribution
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#learn-about-github-codespaces" class="md-nav__link">
<span class="md-ellipsis">
Learn about Github Codespaces
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="codespaces">Codespaces</h1>
<p>You can experiment with codespaces and g3log. </p>
<h2 id="learn-about-github-codespaces">Learn about Github Codespaces</h2>
<p>For an introduction to codespaces you can check out <a href="https://github.com/microsoft/vscode-remote-try-cpp/tree/main">example c++ codespace</a> and <a href="https://docs.github.com/en/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli">using-github-codespaces-with-github-cli</a></p>
<h1 id="commandline-codespaces-quick-reference">Commandline codespaces Quick Reference</h1>
<ol>
<li>List all your codespaces <code>gh codespace list</code></li>
<li>Create a new codespace <code>gh codespace create -r OWNER/REPO_NAME [-b BRANCH]</code>. Ref <a href="https://docs.github.com/en/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository">docs/github: Creating a codespace for a repository</a></li>
<li>View codebase details <code>gh codespace view</code></li>
<li>Stop <code>gh codespace stop -c CODESPACE-NAME</code></li>
<li>Delete <code>gh codespace delete -c CODESPACE-NAME</code></li>
<li>Rebuild <code>gh codespace rebuild</code></li>
<li>Rename <code>gh codespace edit -c CODESPACE-NAME -d DISPLAY-NAME</code></li>
<li>SSH into REMOTE codespace <code>gh codespace ssh -c CODESPACE-NAME</code></li>
<li>Open a remote codespace in CVisual Studio <code>gh codespace code -c CODESPACE-NAME</code> (ref: <a href="https://docs.github.com/en/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code">github:doc cs studio</a>)</li>
<li>Copy local file to/from codespace <code>gh codespace cp [-r] SOURCE(S) DESTINATION</code>. Example: Copy a file from the local machine to the $HOME directory of a codespace: <code>gh codespace cp myfile.txt remote:</code>. Example Copy a file from a codespace to the current directory on the local machine: <code>gh codespace cp remote:myfile.txt .</code> (more information available <a href="https://cli.github.com/manual/gh_codespace_cp">here</a>)</li>
</ol>
<h1 id="try-g3log-in-a-local-dev-container">Try g3log in a local dev container.</h1>
<p>Please note that this will build g3log as if it's on a Debian Linux platform.</p>
<ol>
<li>Clone this repository to your local filesystem.</li>
<li>Start Visual Studio Code. Press F1 and select the <code>Dev Containers: Open Folder in Container...</code> command.</li>
<li>Select the cloned copy of this g3log folder, wait for the container to start, and try things out! You should have debian C++ environment at hand. </li>
</ol>
<h3 id="example-cmake-configuration-and-build">Example cmake configuration and build</h3>
<pre><code>Open a terminal in Visual Studio Code
mkdir debianbuild
cd debianbuild
cmake -DADD_G3LOG_UNIT_TEST=ON -DADD_G3LOG_BENCH_PERFORMANCE=ON ..
make -j
</code></pre>
<h3 id="example-runs">Example runs</h3>
<ol>
<li>performance test in the container <code>./g3log-performance-threaded_mean 4</code></li>
<li>unit tests <code>ctest -v</code></li>
<li>Try a fatal example with dumped stack trace <code>./g3log-FATAL-contract</code></li>
</ol>
<h3 id="example-with-debugging">Example with Debugging.</h3>
<p>Without any need to set up environment on your local machine you can also use Codespaces to debug examples, unit tests etc of g3log.
The pesky thing with VSCode, especially with cmake is to set up the launh.json.
It's a little bit easier if you open a VSCode terminal and do the cmake configuration and build there. Then the <code>launch.json</code> only needs to
contain information about the pecific executable. </p>
<p>Here we try out the <code>g3log-FATAL-contract</code> after cmake configure with <code>-DCMAKE_BUILD_TYPE=Debug</code></p>
<pre><code>{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
// Remember to build the specific part of cmake with
// &quot;cmake -DCMAKE_BUILD_TYPE=Debug&quot; if you want to be able to debug it.
&quot;version&quot;: &quot;0.2.0&quot;,
&quot;configurations&quot;: [
{
&quot;name&quot;: &quot;(gdb) Start&quot;,
&quot;type&quot;: &quot;cppdbg&quot;,
&quot;request&quot;: &quot;launch&quot;,
&quot;program&quot;: &quot;${workspaceFolder}/build/g3log-FATAL-contract&quot;,
&quot;MIMode&quot;: &quot;gdb&quot;,
&quot;cwd&quot;: &quot;${workspaceFolder}/build&quot;
&quot;setupCommands&quot;: [
{
&quot;description&quot;: &quot;Enable pretty-printing for gdb&quot;,
&quot;text&quot;: &quot;-enable-pretty-printing&quot;,
&quot;ignoreFailures&quot;: true
},
{
&quot;description&quot;: &quot;Set Disassembly Flavor to Intel&quot;,
&quot;text&quot;: &quot;-gdb-set disassembly-flavor intel&quot;,
&quot;ignoreFailures&quot;: true
}
]
}
]
}
</code></pre>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
</body>
</html>