Updated README about exception support

This commit is contained in:
François-Xavier Bourlet 2013-11-05 23:07:42 -08:00
parent ed70de5e9e
commit a69e228791
7 changed files with 346 additions and 7 deletions

View File

@ -11,26 +11,40 @@ Backward will spice it up for you:
![pretty stackstrace](doc/pretty.png) ![pretty stackstrace](doc/pretty.png)
There is not much to say. Of course it will be able to display the code Of course it will be able to display the code snippets only if the source files
snippets only if the source files are accessible (else see trace #4 in the are accessible (else see trace #4 in the example).
example).
All "Source" lines and code snippet prefixed by a pipe "|" are frames inline All "Source" lines and code snippet prefixed by a pipe "|" are frames inlined
the next frame. in the next one.
You can see that for the trace #1 in the example, the function You can see that for the trace #1 in the example, the function
`you_shall_not_pass()` was inlined in the function `...read2::do_test()` by the `you_shall_not_pass()` was inlined in the function `...read2::do_test()` by the
compiler. compiler.
### Uncaught exception
You know
![default exception stackstrace](doc/exception_st_rude.png)
Among other things, Backward can also set a custom std::terminate handler,
which brings you pretty printed stacktrace on uncaught exceptions.
And if you go the extra mile and use backward::raise(), you get the stack-trace
of the original exception, no matter how many times the exception was caught
and re-thrown:
![pretty exception stackstrace](doc/exception_st_pretty.png)
##Installation ##Installation
#### Install backward.hpp ### Install backward.hpp
Backward is a header only library. So installing Backward is easy, simply drop Backward is a header only library. So installing Backward is easy, simply drop
a copy of `backward.hpp` along with your other source files in your C++ project. a copy of `backward.hpp` along with your other source files in your C++ project.
You can also use a git submodule or really any other way that best fits your You can also use a git submodule or really any other way that best fits your
environment, as long as you can include `backward.hpp`. environment, as long as you can include `backward.hpp`.
#### Install backward.cpp ### Install backward.cpp
If you want Backward to automatically print a stack trace on most common fatal If you want Backward to automatically print a stack trace on most common fatal
errors (segfault, abort, un-handled exception...), simply add a copy of errors (segfault, abort, un-handled exception...), simply add a copy of

15
doc/Makefile Normal file
View File

@ -0,0 +1,15 @@
mdfiles:=\
../README.md
htmlfiles:=$(mdfiles:.md=.html)
all: $(htmlfiles)
$(mdfiles:.md=.html): $(mdfiles)
%.html: %.md _head.html _foot.html
redcarpet --parse-fenced_code_blocks $< > $@.body && cat _head.html $@.body _foot.html > $@
serve:
cd .. && python -m SimpleHTTPServer

2
doc/_foot.html Normal file
View File

@ -0,0 +1,2 @@
</body>
</html>

31
doc/_head.html Normal file
View File

@ -0,0 +1,31 @@
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- <link href="http://kevinburke.bitbucket.org/markdowncss/markdown.css" rel="stylesheet"></link>-->
<link href="doc/github.css" rel="stylesheet"></link>
<script>
function refresh() {
$.get(document.location.href, null, function(data) {
var new_page = $(data.replace(/(<[ \t]*)(html|head|body)/ig, '$1$2a'));
var new_bodya = new_page.find('bodya');
var cur_body = $("body");
var cur_bodya = cur_body.find("bodya");
if (!cur_bodya[0]) {
cur_bodya = cur_body;
}
if (new_bodya.text() == cur_bodya.text()) {
return;
}
var now = Date();
console.log('updating body ', now);
cur_body.html(new_bodya);
$("body").prepend(now);
});
}
$().ready(function() {
refresh();
setInterval(refresh, 1000);
});
</script>
</head>
<body>

BIN
doc/exception_st_pretty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
doc/exception_st_rude.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

277
doc/github.css Normal file
View File

@ -0,0 +1,277 @@
body {
font-family: Helvetica, arial, sans-serif;
font-size: 14px;
line-height: 1.6;
padding-top: 10px;
padding-bottom: 10px;
background-color: white;
padding: 30px; }
body > *:first-child {
margin-top: 0 !important; }
body > *:last-child {
margin-bottom: 0 !important; }
a {
color: #4183C4; }
a.absent {
color: #cc0000; }
a.anchor {
display: block;
padding-left: 30px;
margin-left: -30px;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
bottom: 0; }
h1, h2, h3, h4, h5, h6 {
margin: 20px 0 10px;
padding: 0;
font-weight: bold;
-webkit-font-smoothing: antialiased;
cursor: text;
position: relative; }
h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor {
background: url("../../images/modules/styleguide/para.png") no-repeat 10px center;
text-decoration: none; }
h1 tt, h1 code {
font-size: inherit; }
h2 tt, h2 code {
font-size: inherit; }
h3 tt, h3 code {
font-size: inherit; }
h4 tt, h4 code {
font-size: inherit; }
h5 tt, h5 code {
font-size: inherit; }
h6 tt, h6 code {
font-size: inherit; }
h1 {
font-size: 28px;
color: black; }
h2 {
font-size: 24px;
border-bottom: 1px solid #cccccc;
color: black; }
h3 {
font-size: 18px; }
h4 {
font-size: 16px; }
h5 {
font-size: 14px; }
h6 {
color: #777777;
font-size: 14px; }
p, blockquote, ul, ol, dl, li, table, pre {
margin: 15px 0; }
hr {
background: transparent url("../../images/modules/pulls/dirty-shade.png") repeat-x 0 0;
border: 0 none;
color: #cccccc;
height: 4px;
padding: 0; }
body > h2:first-child {
margin-top: 0;
padding-top: 0; }
body > h1:first-child {
margin-top: 0;
padding-top: 0; }
body > h1:first-child + h2 {
margin-top: 0;
padding-top: 0; }
body > h3:first-child, body > h4:first-child, body > h5:first-child, body > h6:first-child {
margin-top: 0;
padding-top: 0; }
a:first-child h1, a:first-child h2, a:first-child h3, a:first-child h4, a:first-child h5, a:first-child h6 {
margin-top: 0;
padding-top: 0; }
h1 p, h2 p, h3 p, h4 p, h5 p, h6 p {
margin-top: 0; }
li p.first {
display: inline-block; }
ul, ol {
padding-left: 30px; }
ul :first-child, ol :first-child {
margin-top: 0; }
ul :last-child, ol :last-child {
margin-bottom: 0; }
dl {
padding: 0; }
dl dt {
font-size: 14px;
font-weight: bold;
font-style: italic;
padding: 0;
margin: 15px 0 5px; }
dl dt:first-child {
padding: 0; }
dl dt > :first-child {
margin-top: 0; }
dl dt > :last-child {
margin-bottom: 0; }
dl dd {
margin: 0 0 15px;
padding: 0 15px; }
dl dd > :first-child {
margin-top: 0; }
dl dd > :last-child {
margin-bottom: 0; }
blockquote {
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777; }
blockquote > :first-child {
margin-top: 0; }
blockquote > :last-child {
margin-bottom: 0; }
table {
padding: 0; }
table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
table tr:nth-child(2n) {
background-color: #f8f8f8; }
table tr th {
font-weight: bold;
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px; }
table tr td {
border: 1px solid #cccccc;
text-align: left;
margin: 0;
padding: 6px 13px; }
table tr th :first-child, table tr td :first-child {
margin-top: 0; }
table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
img {
max-width: 100%; }
span.frame {
display: block;
overflow: hidden; }
span.frame > span {
border: 1px solid #dddddd;
display: block;
float: left;
overflow: hidden;
margin: 13px 0 0;
padding: 7px;
width: auto; }
span.frame span img {
display: block;
float: left; }
span.frame span span {
clear: both;
color: #333333;
display: block;
padding: 5px 0 0; }
span.align-center {
display: block;
overflow: hidden;
clear: both; }
span.align-center > span {
display: block;
overflow: hidden;
margin: 13px auto 0;
text-align: center; }
span.align-center span img {
margin: 0 auto;
text-align: center; }
span.align-right {
display: block;
overflow: hidden;
clear: both; }
span.align-right > span {
display: block;
overflow: hidden;
margin: 13px 0 0;
text-align: right; }
span.align-right span img {
margin: 0;
text-align: right; }
span.float-left {
display: block;
margin-right: 13px;
overflow: hidden;
float: left; }
span.float-left span {
margin: 13px 0 0; }
span.float-right {
display: block;
margin-left: 13px;
overflow: hidden;
float: right; }
span.float-right > span {
display: block;
overflow: hidden;
margin: 13px auto 0;
text-align: right; }
code, tt {
margin: 0 2px;
padding: 0 5px;
white-space: nowrap;
border: 1px solid #eaeaea;
background-color: #f8f8f8;
border-radius: 3px; }
pre code {
margin: 0;
padding: 0;
white-space: pre;
border: none;
background: transparent; }
.highlight pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px; }
pre {
background-color: #f8f8f8;
border: 1px solid #cccccc;
font-size: 13px;
line-height: 19px;
overflow: auto;
padding: 6px 10px;
border-radius: 3px; }
pre code, pre tt {
background-color: transparent;
border: none; }